kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

2024ねんのヴぃむあーるしぃー

vimrcの設定を晒すのは数年ぶりなので初投稿です(?)

たまーにバックアップだのこのプラグインが~とかで記事にしてましたが、改めてvimrc全文を晒して…という事はやってこなかったと思うので、現時点でのvimrcの中身を晒しものにしとこうかなと。

使ってない設定とか、書いてある場所が違う設定もあるかもしれませんが、どうぞ生煮えの目で見守ってやってください!

" ※他環境でよみこむと終端文字エラーを起こすことがあるので注意
"  e.g. CFLRのvimrcをLRで読み込むなど

set ttimeout
set timeoutlen=300
set ttimeoutlen=10

let mapleader = " "
" set list

" show hlsearch result num
set shortmess-=S

set ruler
set rulerformat=%55(%{strftime('%a\ %b\ %e\ %I:%M\ %p')}\ %5l,%-6(%c%V%)\ %P%)


set number
set relativenumber

"   plugin configuration   "

packadd vim-jetpack
call jetpack#begin()
  Jetpack 'tani/vim-jetpack', {'opt': 1} "bootstrap
  Jetpack 'liuchengxu/vim-which-key'
  Jetpack 'kaz399/spzenhan.vim'
  Jetpack 'lambdalisue/fern.vim'

  Jetpack 'jeetsukumaran/vim-buffergator'
  "Jetpack 'vim-airline/vim-airline'
  Jetpack 'raghur/vim-ghost'
  Jetpack 'vim-scripts/YankRing.vim'

  Jetpack 'itchyny/lightline.vim' 

  Jetpack 'prabirshrestha/vim-lsp'
  Jetpack 'prabirshrestha/asyncomplete.vim'
  Jetpack 'nathanaelkane/vim-indent-guides'
  Jetpack 'altercation/vim-colors-solarized'
  Jetpack 'cocopon/iceberg.vim'
  Jetpack 'gkeep/iceberg-dark'
  Jetpack 'junegunn/fzf.vim'
  Jetpack 'junegunn/fzf', { 'do': {-> fzf#install()} }
  Jetpack 'mechatroner/rainbow_csv'
  Jetpack 'mhinz/vim-startify'
  Jetpack 'roxma/vim-hug-neovim-rpc'
  Jetpack 'roxma/nvim-yarp'
  Jetpack 'liuchengxu/vim-which-key'
  Jetpack 'simeji/winresizer'
  Jetpack 'mattn/vim-maketable'
  Jetpack 'obcat/vim-hitspop'
call jetpack#end()

let s:jetpackfile = expand('<sfile>:p:h') .. '/pack/jetpack/opt/vim-jetpack/plugin/jetpack.vim'
let s:jetpackurl = "https://raw.githubusercontent.com/tani/vim-jetpack/master/plugin/jetpack.vim"
if !filereadable(s:jetpackfile)
  call system(printf('curl -fsSLo %s --create-dirs %s', s:jetpackfile, s:jetpackurl))
endif

for name in jetpack#names()
  if !jetpack#tap(name)
    call jetpack#sync()
    break
  endif
endfor

" vim-whichkey config
" toggle whichkey
nmap <silent> <Leader> :WhichKey '<Space>' <CR>



" vim-hitstop config
let g:hitstop_line = 'winbot'
let g:hitstop_column = 'winright'

highlight link hitstopErrorMsg ErrorMsg



" fzfz / RG use config
nnoremap <silent> <Leader>,p :GFiles<CR>
nnoremap <silent> <Leader>,P :Files<CR>
nnoremap <silent> <Leader>,s :RG<CR>
nnoremap <silent> <Leader>,c :Commits<CR>


" Fern.vim config

nmap <silent><C-e> :Fern ~/ -reveal=% -drawer -toggle -width=30<CR> 
nmap <silent><Leader>e :Fern ~/ -reveal=% -drawer -toggle -width=30<CR> 

"lightline-vim settings
let g:lightline = {
   \ 'colorscheme': 'icebergLight',
   \ }

"   plugin confiuration END   "
"
"   normal vim confiuration END   "

set nocompatible
set cursorline
set cursorcolumn

set incsearch
set ttyfast
set showtabline=2

set encoding=utf-8

" 改行コードの自動判別
set fileformats=unix,dos,mac
" 他環境での改行コード変換
" setl fenc=utf-8
" setl ff=-unix
" setl ff=dos

"file profile config
set nobomb
"swpファイル保存ディレクトリ
set directory=~/vimfiles
"バックアップファイル(redo/undoファイル)保存ディレクトリ
set backupdir=~/vimfiles

set showcmd
"未保存バッファから移動する時に警告を無視する
set hidden

"文字列検索時のハイライト有効化
set hlsearch

"copy, cut, paste config
set clipboard=unnamed,autoselect
"clipboard configuration(neovim)
" set clipboard=unnamedplus

" backspaceキーで削除出来るようにする
set backspace=indent,eol,start

"setting indent
set autoindent
set smartindent
set breakindent

"status line ever indicate
set laststatus=2
set autowrite


set nobackup
set noswapfile
set noundofile

"tab & visual UI settings
set shiftwidth=4
set tabstop=4
set noexpandtab
set title
set background=dark

"terminal color::
set t_Co=256

"color scheme setting::
"colorscheme retrobox
colorscheme retrobox
syntax enable

"use multibyte character setting
set ambiwidth=double


" nnoremap j gj
" nnoremap k gk
" nmap gj j
" nmap gk k

nmap <expr> j v:count ? 'j' : 'gj'
nmap <expr> k v:count ? 'k' : 'gk'


nmap <Esc><Esc> :nohlsearch<CR><Esc>
imap kj <Esc>
set whichwrap=b,s,<,>,[,]


" Buffergator mru list toggle
nmap <silent><Leader><Leader>b :BuffergatorToggle<CR><Esc>
" g:buffergator_split_size = 2
" g:buffergator_suppress_keymaps = 1

" Diff's configuration
nmap <Leader><C-d> :diffthis<CR>
nmap <Leader><C-S-d> :diffoff<CR>

" ime off(spzenhanを使用する場合※プラグインとしてインストール必須?環境変数のパスを通してしまえば良い)
" ※環境によっては動作しない可能性あり(Windows機3機で検証済)

if executable('spzenhan')
    let s:lastimestate = 0
    autocmd InsertLeave * :call system('spzenhan 0')
    autocmd CmdlineLeave * :call system('spzenhan 0')
endif

" cmd-vim tab switch configuration
nmap <C-Tab> :tabnext<CR>
nmap <C-S-Tab> :tabprevious<CR>


nmap <C-j> :bnext<CR>
nmap <C-k> :bprev<CR>
cmap sefm set filetype=markdown
cmap sefp set filetype=php
cmap sefh set filetype=html

"open-browser.vim settings
" let g:netrw_nogx = 1 " disable netrw's gx mapping.
" nmap gx <Plug>(openbrowser-smart-search)
" vmap gx <Plug>(openbrowser-smart-search)

" coc.vim configuration
" set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}

" GUI font configuration

"default use font/fontwide
" フォントのところは適宜変える形で
set guifont=Juisee_HWNF:h12 guifontwide=Juisee_HWNF:h12


" コマンド一発でGUIの文字のサイズを変更できるようにする VS= 10, VSS= 12, VSSS=14

cmap VS set guifont=Juisee_HWNF:h10 guifontwide=Juisee_HWNF:h10
cmap VSS set guifont=Juisee_HWNF:h12 guifontwide=Juisee_HWNF:h12
cmap VSSS set guifont=Juisee_HWNF:h14 guifontwide=Juisee_HWNF:h14

あいかわらずinit.luaから引き継いでいる点としては、

  • <C-j> / <C-k>でバッファの移動
  • <C-Tab> / <C-S-Tab>でタブの移動
  • Fern.vimの設定
  • diffのバインド
  • フォントのマッピング

あたりで、多くのnvimプラグインvimでもそれっぽい感じで使えるようにするために(互換性のあるプラグイン以外は)最初の2週間ほどはプラグインを探して試してまた探して…という作業に追われることになってしまった。

一方で、フォントはnvimに切り替えてからの1年、HackGenConsoleNF→PlemolJP Console NFJ→Juisee_HWNFと相変わらず等幅フォントを使い続ける点は変わっておらず、やはり3:5版は使いづらいという苦手意識が拭えない。いや常用すれば快適なのかもしれないけど。

プラグイン

パッケージマネージャはlazy.nvim→vim-plug→jetpack.vimへと移行。

vim-plugもjetpackも1ファイルで完結していて特に不満はないのだけど、単にjetpackの方が(若干)読み込みが早いのと、lazyほど豪華なUIは無くても良いかな、と思ったことが大きい。

特にUIがごちゃごちゃしすぎているというのは大きく、しかもこのvimrcでWindows/Linuxどちらも使うので、快適な遅延読み込みのために微調整するのが面倒くさいというのもあるし。

その中でも圧倒的に便利なプラグインをいくつか。

lightline.vim

  • この類のプラグインというとairlineあたりが筆頭候補になるけど、10年前からずっとステータスバーはlightlineで統一。というよりこのプラグインのデフォルト設定に慣れすぎてほかの色(e.g.NORMALモードで赤や橙になるやつとか)が違和感しかなく、疲れるから使ってないという切実な事情もある。

が、一時期カラースキームをIcebergにしていた影響でlightlineもIcebargに統一してあり、かつステータスバーだけはLightテーマで統一。

spzenhan.vim

日本語入力をする上では欠かせない。

一応、linux(かつfcitx5-mozc)で使う場合はfcitx5-remtoeという選択肢があるにせよ、linuxでも大して設定変更をせずに使える点は高く評価したい。

hitstop

最近追加したがかなり使い勝手が良く、検索時にスクショのように右上(設定で変更可能)で何件中の何件目かを確認できるのが良い。

ステータスバーにも同様の表示はあり、環境次第ではこっちのほうが使いやすかったりするが、いかんせん一画面を分割していることの多い人間としてはいちいちウィンドウごとに異なる幅の右下をすぐに凝視するのはつらいという事もありこのプラグインに落ち着いた。

hitstop

vimそのものの機能で便利なもの

text-obejcts

オペレータ、モーションの概念自体は前から知っていたものの、テキストオブジェクトを常用するようになったのは今年に入ってから。特に[``]の内側や段落ごとといった感じで範囲指定を行う機能…と解釈してるが、普通にオペレータ+モーションでやるよりも早い場合がある。

今までは例えば[innner]という囲みがあったら、iに移動して6sでインサートモードに入ってから文字入力をしていたが、これが4文字でも256文字でも毎回数字を打っていた(HHKBとはいえ数字を打ち間違えることはしばしば)。

それに対して、テキストオブジェクトも使えばsiwの3文字タイプするだけで済むし、d,i,wどれをとっても位置を正確に指が覚えているので「8ってuの上だっけ?」と一瞬ためらう必要もなし。

同様にdiwならその範囲内の文字を削除、そもそもiにカーソルを合わせなくても(wで単語の先頭まで移動しなくても)ci[で[]のなかの文字を削除してインサートモードへ移動、というのもできる。めっちゃ便利!

Leader / LocaleLeader

Leaderはみんな大好き任意のコマンド列をたたくときのためのスイッチみたいなやつ。一方で、LocalLeaderは特定のプラグイン内でなど、Leaderとは別のスイッチを使いたいときのやつ。ただしLocal~の方はあんまり使ってないw

例として

nmap <silent><Leader><Leader>b :BuffergatorToggle<CR><Esc>
nmap <silent><Leader>e :Fern ~/ -reveal=% -drawer -toggle -width=30<CR> 

だったら、いちいち:BuffergatorToggleと入力しなくてもスペース×2→bでバッファ一覧が開けるようになるし、いちいち指定の幅でFernを開くためのコマンドを入力しなくても、 eの2タイプですぐ開けるようになる。

カーソル移動

カーソルなんてh/j/k/lで使うやん~という話ではなく、H/M/L/<C-u>/<C-d>はもちろん、(/)/{/}など含めてカーソル移動全般のコマンド。

当然PgUPとかPgDOWNとかも使うが、基本的にホームポジションで操作できるならHHKBのキー配置(をいじくってる身からすると)から下手にほかのキーに指を伸ばしたくないのでこれらのコマンドは快適に編集するうえでは必須。

set hidden

バッファを保存しない状態で移動しようとすると警告が出るのだが、それを無視する。特に原稿執筆を秀丸とかEmEditorとかメモ帳でやらずにvimでやる身としては、無名バッファを何度も行き来することなど日常茶飯事なので、nohiddenにしてあると使いづらくて仕方がない。


vimそのものとは関係ないがあると便利なもの

powertoys

MS謹製の便利ツールセット。環境変数、powertoys run、color picker、FancyZonesなど挙げればキリがなく、しかもそのすべてがコマンドで呼び出し可能という使い勝手の良さ。

keynavish

ポメラの調教()でよく使われているkeynavのwindows移植版。こちらもコマンド操作でマウスカーソルを移動することが出来て、しかも操作体系がvimとも親和性が高いのでスムーズにウィンドウ移動が可能。

例えば、横に4つ開いたウィンドウの左端から右端に移動したいときは<C-;>→l→lですぐ移動できるし、ランチャーとしても代用可能という便利さはそのまま受け継がれている。

しかもvimrcのように設定ファイルが存在し、カスタム可能。さらにそれが平文で保存されていてバイナリでもなく、vimでも普通のテキストで読み込める。

Nerd-Font入りのフォント

例:PlemolJP NF版

とにかくファイラを開いたときに見分けがつきやすい。おまけにちょっとした文字(絵文字相当)もnotepad.exeなんかで表示させた時とあまり違和感なく表示できる。


さて、2024年の話を2025年に3日連続でブチ上げるばっどむーぶをやらかしてますが、たぶん正月三日坊主で明日からは来年まで記事を書かないと思うので、今回が永遠の初投稿という事にしてやってくださいw

2026年時点でのvimrcを丸ごと晒し首にするっていう記事も良いな…