Vimの基本設定例【自分のPCで使用しているソフトウェア,設定の紹介 #11】
さて前回は概略的な話をしましたが,今回はより詳しくVimの設定に関していくつか便利な設定を紹介してみたいと思います。
多くの人が設定しているであろうことは今回述べませんのであしからず。
全体が見てみたい,という方は以下のリンクから飛べますので,時間のあるときにでも眺めてみてください。
それではさっそくvimrc
に書いている設定のいくつかを紹介していきます。
tmuxのウィンドウ名をVimで編集中のファイル名にする:
以前述べたように,基本的にtmux内に自動で入るようにしているので,tmuxとの連携は意識します。
if $TMUX != "" augroup titlesettings autocmd! autocmd BufEnter,InsertEnter * call system("tmux rename-window '(vim)" . expand("%:t") . "'") autocmd VimLeave * call system("tmux rename-window zsh") autocmd BufEnter * let &titlestring = ' ' . expand("%:t") augroup END endif
のように書くことによって,バッファ切替時,インサートモードに入った段階でtmuxのウィンドウ名が切り替わります。 "VimLeave"でももとに戻すような設定をしていますが,zshのところで紹介したように,自動でリネームをしてくれるようになっているので,この部分は僕の環境では必要ありません。が,残ったままになっています。
詳しくはこちら↓を見てください。
tmuxのウィンドウ名をvimの編集中のファイル名に設定する - Qiita
参考:
Pythonスクリプトを編集時,gq
コマンドでPEP8準拠フォーマットに
augroup filetype_python autocmd! " python autocmd Filetype python let &formatprg="autopep8 -" autocmd FileType python setlocal completeopt-=preview augroup END
これは他のファイルタイプでも使えますが,formatprg
を指定することで,gq
コマンド(ある範囲行を整形)で用いられるプログラムを指定することができます。
autopep8
というコマンドを使えば,たとえば1+2
は1 + 2
のように表示すべき,といったPEP8の基準に沿った形式に整形してくれます。
ガーッと書いていてスペース入れ忘れたり,横幅の文字数を超えていたりしたときに,手で直すのではなく,{v}gq
などでして一発で整形できます。
外部ツールとの連携は,簡単かつ便利なので,積極的にやりましょう。
htmlファイルの整形
これもformatprg
を指定することで整形表示を行うものですが,より破壊的変更を行うものです。
文章変換ツールの代表としてpandocというソフトウェアがありますが,これを使って一回htmlファイルからmarkdownに変換し,それをまたhtmlに変換することで,よりシンプルで見やすい表示になります。
ただし,失われる情報も多くあるので,単純に見やすくするための整形を行いたい人は,この設定をするべきではありません。
自分の場合,htmlを生で見ないといけないこと自体が少ないので,このような設定をしています。
007
みたいな連番をCtrl + a
で008
となるようにする
ノーマルモードでCtrl + a
を押すと,その行のカーソルより後ろに数字と見なされる文字列があったときに,一つ数を進める変更を行うことができます。
(逆はCtrl + x
)
しかし,見出しの007
のように0から始まっている数があった時,Vimはこれを8進数表記と見なし,008
ではなく,010
を返します。
僕の場合8進数を使いたいときよりも10進数を使いたいときの方が多いので
set nrformats-=octal
として8進数と見なさないようにしています。
カーソル下がファイル名だった時,gx
キーで適切なアプリケーションで開く
gx
キーを押すと,そのカーソル下のURLを表示できますが,その表示のために使うプログラムを,xdg-open
にすることで,適切に開くことができます。
let g:netrw_browsex_viewer="xdg-open"
Linuxの場合xdg-open
が無難なチョイスかと思いますが,他にもgnome-open
や,Macならopen
でいいと思います。
See: :h netrw_filehandler
タブ,ファイル末尾,ラップ表示の記号の設定
タブ文字やファイル末尾,ラップされた行頭はそれとわかるように記号が付けられていると便利なことがあります。
以下のように設定しています。
" show Tab and Space at end of the line set list listchars=tab:▸\ ,trail:~ " showbreaks set showbreak=\ ↪
あまりごちゃごちゃし過ぎもしないくらいの情報量がいいのではないかと思います。
See: :h lcs
キーバインドの設定
Q
キーでカーソルしたの文字列をシェルスクリプトとして実行,標準出力を挿入
nnoremap Q !!$SHELL<CR>
最近入れたキーバインドなのですが,大変便利です。
たとえば,連番を挿入したいなぁというとき
seq 1 10
と打ってからその行でQ
を押すと,
1 2 3 4 5 6 7 8 9 10
となります。
もちろん:r ! <command>
としても同じことが出来るのですが,ファイル自体にこのコマンドを記述したままで保存しておけるというのは大きな違いかなと思っています。
何かソフトウェアをインストールしてきたときに,その設定手順と実際に実行するコマンドをmarkdownファイル等にまとめておいて,順番にQ
キーを押していけばインストールが完了する,といった使い方もできます。
自分の中では簡易版Jupyter Notebookみたいな印象でよく使っています。
但し,自分のいるディレクトリはよく確認しておく必要があります。
移動系
ラップされた行を矢印キーでなら動けるようにする
j
,k
で動けるようにしてもよかったのですが,ラップ単位ではなく実際の行で動いた方が便利なことも多いので,そこまではしませんでした。
それから最近は矢印キーをほんとに使わなくなってきたので,設定はしましたがgj
とgk
で移動しています。
" move in wrapped line by arrow key nnoremap <Down> gj nnoremap <Up> gk
行頭からh
で前の行の末尾/行末からl
で次の行の行頭に
" move from line head to line end nnoremap h <Left>zv " move from line end to line head nnoremap l <Right>zv これは自分の中でかなり重要度の高い設定です。
インサートモード時Ctrl
+ h
/j
/k
/l
でカーソル移動
これも設定した当時は便利だと思って使っていたのですが,すぐにエスケープしてカーソル移動する癖が身についてきたので,あまり使わなくなってきた設定の一つです。
" cursor moved in insert mode inoremap <C-j> <Down> inoremap <C-k> <Up> inoremap <C-h> <Left> inoremap <C-l> <Right>
エスケープ2回押しで検索ハイライトを消す
nnoremap <silent> <ESC><ESC> :nohlsearch<CR>
ハイライトが残ったままだと気持ちよくないので,エスケープを繰り返し2回押せばハイライトが解除されるようにしています。n
キー等を押せばハイライトは復活します。
カーソル下のファイルを新しいタブで開く
Vimのデフォルトではカーソル下がファイル名のときgf
と押すと,現在のウィンドウの新しいバッファにそのファイルを開いて表示します。Ctrl + w gF
とすると,新しいタブで開かれます。
僕としては新しいタブで開かれるという挙動の方が嬉しかったので,gf
キーで新しくタブを作成してファイルを開くようにしました。
また,gF
キーで,まだ存在していないファイルの場合も新しいタブで新しいファイルを作成できるようにしました。
コメントで構造を残しておけば一つファイルを開けばシームレスに必要なファイルを呼び出すことができて便利だと思います。
" open the file in new tab nnoremap gf <C-w>gf " create the file and open in new tab nnoremap gF :tabedit <C-r><C-f><CR>
うっかり日本語で打ってしまったミスをカバーする
これはQiitaで@igrepさんの全角アルファベットやひらがな・カタカナを入力しても(ちょっと)いい感じに解釈してくれるvimrc - Qiitaというのをみてインスパイアされて設定したものです。
日本語のままエスケープしてコマンドをかな入力のまま打ってしまっても,いいかんじに解釈してくれる,というコンセプトそのままです。
" for Japanese IME mode nnoremap あ a nnoremap い i nnoremap う u nnoremap え e nnoremap お o nnoremap っd dd nnoremap っy yy nnoremap し” ci" nnoremap し’ ci' nnoremap せ ce nnoremap で de inoremap <silent> っj <ESC> nnoremap っz zz nnoremap ・ /
今後増やしていってもいいのですが,<F10>
キーとか押せば全部半角英数に変換されるので,そのままエンター押せばそのコマンドを実行できます。
括弧を挿入したらカーソルを中に移動する
これは割とよく見るかもしれないので新しさはないですね。
" quote and bracket inoremap {} {}<Left> inoremap [] []<Left> inoremap () ()<Left> inoremap "" ""<Left> inoremap ”” ””<Left> inoremap '' ''<Left> inoremap ’’ ’’<Left> inoremap <> <><Left> inoremap $$ $$<Left>
まとめ
Vimの基本設定についてまとめてみました。 これで全部ではないので,詳しく見たい方は冒頭に張っておいたリンクから飛んでください。
それから今回の内容とは関係ないですが,Vim力を上げるには低スペックのPCにで修行するといいと思います。
というのも,カーソル移動などをh
連打等でやっていたら遅くなってしまうような環境であればあるほどf
,t
やw
,e
などを活用できるようになると思うからです。
さて,次回はVimのプラグインに関して,何を使っているか,どういった設定をしているかざっと紹介していきたいと思います。
ありがとうございました。