Katsuoのサイト
主にvimrcの設定内容についてメモ。 どこかからコピペして作ることが多く、内容がわからないまま設定している項目も多いので、 設定した内容についてメモや説明など。基本的に便利だと思って実際に設定する設定だけメモする。
vim9仕様にする。vim8->vim9へのバージョンアップでいろいろ仕様変更されている。
下位互換を保ちつつvim9仕様の機能が使える。
vimrcファイルの一番最初に書いておく必要がある。
vim内部のエンコーディングをutf-8に設定。
vim scriptのエンコーディングをutf-8に設定。
既存のファイルを開いた時に、ファイルのエンコーディングの設定項目であるfileencoding
を、決めるための設定。fileencodingsに設定した順にエンコーディングし、エンコーディングのエラーが発生しなかったものが
そのファイルのfileencodingのエンコードの種類として設定される。
ファイルを作成で新規に開いた場合は、fileencodingのグローバル設定値が適用される。
ucs-bomは文字コードのひとつであるucsにBOMの情報を付与したもの。BOMはファイルがビッグエンディアンかリトルエンディアンかの情報を付与するためのもの。
BOMはByte Order Markの略。
Unicodeを実現するためにUCSができたが、いまいちだったみたいで、そこからより優れた方式としてUTFが作られた。
iso-2022-jpとは、日本の文字を表現するための文字コードで、JISコードと呼ばれるものの正式名称。
cp932も日本の文字を表現するための文字コードで、マイクロソフトがshift_jisをもとに拡張したもの。shift_jis自体も日本の文字を表現するするための文字コード。
euc-jpも日本の文字を表現するための文字コードで、主にunix環境でOSが日本語を扱うときに利用される文字コード。
vimの左側に行番号を表示する。
プログラミング言語など内容に合わせて色を変えて表示されるのでソースコードが見やすくなる。
古いバージョンのvimだとこの設定は存在しない。
文字の検索を入力している途中でテキスト中の候補に飛び表示される。
検索でヒットした文字を強調表示する。 検索後もハイライトされたままやウザいみたいなのを見かけるので設定はしない。 あとで忘れてまた設定してしまいそうなのでメモとして書いておく。
/aのように小文字で検索したら小文字にも大文字にもヒットするけど /Aのように大文字で検索したら大文字にヒットするけど小文字にはヒットしない設定。
ひとつ前の行のインデントに合わせてインデントを入れてくれる。
autoindentと同じだがいくつかのC構文を認識し適切な箇所のインデントを増減させてくれる。
折り返した行の先頭位置を揃えてくれる。例えば、1行が100文字もあって、70文字で折り返されるとき、折り返された行の先頭がそろう。
//abcdefghijという1行が下記のように折り返される
abcdefg
hij
()を入力の際に、対応するかっこに一瞬飛んで、対応するカッコがどこにあるのか分かりやすくする。
デフォルトでは0.5秒、対応するカッコに飛ぶが、少々長いらしく、set matchtime=1とするとちょうどよいらしい。なので、showmatchとセットで設定しておく。
backspaceキーを押しても効かない場合は設定する。
PCによってはたまにデフォルトではbackspaceキーが無効になっていることがある。
設定の意味:
indent: indentによる空白を削除
eol: 行末を削除
start: カーソルよりも前(左側)の文字を削除
startについては日本語では”カーソルよりも前”と書いてあってどっちにも解釈できるので 説明がわかりにくいけど、カーソルの後ろ。つまり普通のbackspaceキーの動作のこと。 vimは普通のbackspaceの動作がデフォルトでは効かなかったりする。
下記のように数値でも設定できる。
set backspace=0 //set backspace= と同じ
set backspace=1 //set backspace=indent,eolと同じ
set backspace=2 //set backspace=indent,eol,startと同じ
コマンドの履歴と検索履歴を200個ずつ残す。
現在のカーソル位置(行,列)を画面の右下にずっと表示する。
画面最下部のステータスラインを2に設定すると常にステータスラインが表示される。
入力中のコマンドの文字をステータスラインに表示する。入力が完了=エンターキー押してコマンドが実行されると表示は消える。
コマンドを入力してtabを押したときにコマンドの候補がステータスラインに表示される。
行末で通常はカーソルは最後の文字の上にあり、それ以上右に移動できないけど、 設定することで行末の最後の文字の1文字先にカーソルが移動できる。
この設定していないと、使っていて何気にストレスになるので、やっておいてよかった。
filetypeの検出、ファイルタイププラグインの適用、ファイルタイプに合わせたインデントの自動調整
下記を記述することでDiffOrigコマンドがつかえるようになる。
command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
\ | wincmd p | diffthis
下記コマンドを実行することで、差分モードで表示される。 変更前とこれから変更するファイルが同時に左右に表示され、新しく変更するとそこがハイライトされる。
プログラミングしていて変更点を確認したい場合は便利。
:DiffOrig
デフォルトで入っているけど無効になっているmatchitプラグインを有効にする。
有効にすると、’%’キーを押したときに()だけでなくif/endifなどの組み合わせにも
ハイライトが対応できるようになる。
画面のスクロールをしたときに、画面の上下からセットした値分の行数でカーソル位置が
止まった状態になり、画面の端までカーソルが行かなくなった状態でスクロールできるので画面が見やすくなる。
10行だと多すぎて逆に違和感あったので、5行に設定した。5行が適当かなと思いました。
カーソルがある行全体をハイライトしてくれる。
最初のころは設定していなかったけど、これは何気に見やすくなるのでよさげな設定です。
通常はVimの*レジスタとOSのクリップボードが連動してるので、
vim以外のとこからコピーした文字列をVimにペーストでき、vimでヤンクした文字列をvim以外のところにペーストできる。
ただし、put, yankの都度*レジスタを指定しないと動作しないので、慣れないと大変。
この問題を解決できるのがこの設定。yank, putするときにクリップボードを使用できるので便利。
inoremap <silent >jj <ESC>
インサートモードでESCにjjをキーマッピング
insertモードでjjでノーマルモードに抜けれるので便利。
特にESCキーが遠いキーボードの場合はかなり便利。
set pasteを設定しているとこのキーマッピングが効かないので注意。
ファイル上書き保存前にバックアップを作ることを無効にする。
不要そうな機能でデフォルトで有効のままだと処理のオーバーヘッドになりそうな気もするので
無効にしておく。必要そうなら再度設定すればよい。
保存時にバックアップファイルを作らない。 nowritebackupとセットで設定しておくとよさそう。
swapfileを作らない。
ファイルを閉じると変更履歴が消えてしまうので、一度ファイルを閉じて開き直したら閉じる前に行ったundo操作は
できないけど、これをできるように設定する。
> mkdir ~/.vim/undo
if has('persistent_undo')
let undo_path = expand('~/.vim/undo')
exe 'set undodir=' .. undo_path
set undofile
endif
検索したとき最後の検索まで行ったらまた最初の検索文字に戻る(ループ)する設定。
複数のテキストファイルを開いている状態でファイルを切り替えるときは保存しないとファイルの表示を
切り替えることができないけど、保存していなくてもファイル表示の切り替えができるようになる設定。
を入力したとき挿入されるtabがspace何個分にするかを設定。
例)
まずshift vでインデントしたい行を選択する。
次に、>を入力するとインデントされるが、このときのスペースを何個分にするかを設定できる。
webからソースコードなどをvimにコピペしたとき変なインデントなどが勝手に入ってしまう
ことを防止できる設定。これを設定するとinoremap jj
normalモードでctrl+aを押すと数字をインクリメントしてくれるが、デフォルトだと、例えば007とすると8進数とvimが認識しているので、
インクリメントすると007の次が010になる。この挙動を防止するために、下記を設定する。
nrformats(nf)で、ctrl+aでのインクリメントで使用するフォーマットを指定できる
set nf=alpha,hex //アルファベットと8進数をインクリメントから除外する
1行が長く、1行だけど複数行で表示されて画面に収まらなかった文字が@@@などと@で表示されずちゃんとすべて表示されるようにするための設定。
入力補完の表示の行の高さを設定できる。デフォルトでは0となっていて、画面の一番下まで表示される。
set pumheight=10
デフォルトだと補完が画面の下いっぱいまで占領して見栄えが良くないので、設定しておく。
ビープ音またはビジュアルベルが発生するイベントはvimにはたくさんある。よく見るのが最下段の行でjを押したりnormalモードでESCを押したとき。 ベルは基本的に不要なのですべてのイベントのベルをオフにしておく。
set belloff=all
ttimeoutlenでキーコード押下時の反応時間を設定できる。例えば左矢印キーを押したときは、ターミナルからvimへ^[O*Dというキーコードが送出される。 ttimeoutlenの値は、デフォルトでttimeoutlen=100で100ミリ秒という短い時間となっているが、パソコンの処理能力等の関係から、もっと速めても問題ない。
逆に遅くする場合は、極端に処理が遅いターミナルを使っている場合など。その場合はタイマーの時間内にキーコードが送出されず、時間切れで押したキーが
無効になったりする(推測だが)ので、システムに合わせて遅くすることで解消できる。
set ttimeoutlen=50
カレントディレクトリが適切になる。開いたり選択したファイルを含んでいるディレクトリがカレントディレクトリになる。
autocmdでイベントに対し自動的に実行する処理を作ることができる。
イベントについては、:help {event} で確認できる。
自動的に処理をさせたい時に便利そうなので、継続的に調べて活用。
書式:
:au[tocmd] [group] {event} {イベント} [++once] [++nested] {コマンド}
autocmdの使用例:
autocmd BufNewFile * put ='#start editing new file'
//vim sample.txtのように新規ファイルを編集しだすと上記の文字列が自動的に挿入される
augroupとは:
autocmdをグループ化できる。
任意のグループとして下記のように自動コマンドを定義する。
上記によって、自動コマンドが2回定義されてしまうことを防止できる。
augroup NewFileEdit
au!
au BufNewFile * put ='#start editing new file'
augroup END