実践vimはいい本。vimを今後長く付き合っていくパートナーと考えたならば、一度は読んでおきたいと思いました。本記事は実践vimで得たtipsの自分用羅列です。
最初にvimをやろうかと思った人は、この本買うよりも前に、ブラインドタッチをマスターすることと、vimのインストールと、vimインストール時点で同梱されているvimtutor
(インタラクティブなvimのチュートリアル)を一通りやっておきましょう。
この投稿は順次アップデートしていく予定です。
tips
繰り返ししやすいようにエディットする癖をつける。
- VIM Golf: vimエディットのスコアリング
- 理想は移動にキー1入力、何かするのにキー1入力
- f,tコマンドやオペレータ(d,y,c+移動キー)の組み合わせで移動とアクションを同時に行う
- j.や.;.;だけで高速編集したい。
- dap, caw, ciw, yaw, yapとか。pはパラグラフ。{}で移動できる範囲
ワンストロークでツーアクションするキーを覚える
- I, A: 行頭、行末へ移動しながら挿入モードへ移行
- D, (C): 行末へ向かって削除(からの挿入モードへ移行)
- O, o: 改行しながら挿入モードへ移行
繰り返しコマンドをなるべく使う
.
動作の繰り返し;
移動の繰り返し@
マクロの繰り返し&
exコマンドの繰り返し
インサートモード中に矢印キーで移動すると、ノーマルモードで移動したとvimは考える。
- つまり、
u
による移動に区切りができる。 - アンドゥする単位を決める、すなわち粒度を制御をするためにわざと矢印キーを使うのも手かな。
- <CR>で改行するよりはoで改行する癖をつける。
- つまり、
移動
- H,Lで画面の上下にカーソルを移動して、zzで中央に寄せるのが速くて読みやすい。
- もちろ<C-D><C-U>も使える。
- f{char}, t{char}と;(その反対は,)は他のエディタにはない横移動最強コマンド
検索
- '/'よりは'*'
- '?'よりは'#'
- <C-A><C-X>は行内の数字を勝手に探して、インクリメント、デクリメントしてくれる。
作業スペース
作業スペースは小さい方からbuffer < window < tabの順
buffer
- バッファは散らかった机、引数リストは整頓された作業スペースのイメージ
- :lsはバッファを見るためのvimから備わった機能
- :argsはex時代からある引数リストと言われる機能
- argsの引数にはshellコマンドが使える。バッククォート`を使おう。
- argsの引数には*(ファイル名)や**(ディレクトリ名)が使える。
- argsは自分の好きなように
:argdo
や:bufdo
する前にset hidden
設定しておくことで、バッファの保存をしなくてもバッファ移動ができる。- <C-^>: で代替ファイル,さっき編集していたファイルへ移動。
- 移動は
:bn[ext]
(反対はbp[revious]
)- 以下のようにキーマップを変えるのも良い。
buffer操作のキーマップ
nnoremap <silent>[b:bprevious<CR>
nnoremap <silent>]b:bnext<CR>
nnoremap <silent>[B :bfirst<CR>
nnoremap <silent>]B :blast<CR>
:e %:h
- e: edit
- %: 現在アクティブなファイルのファイル名
- h: ファイル名を隠す
ファイルパス展開
" `:e %%`アクティブなファイルが含まれているディレクトリを手早く展開する" :eだけでなく:wや:rでも使える。
cnoremap <expr> %% getcmdtype()==':' ? expand('%:h').'/':'%%'
window
- vim用語でウィンドウとは、バッファに対するビューポートのこと。
- 移動は<C-W>h[jkl]
- <C-W><C-L>: 二分割の場合、水平分割を垂直分割に置き換える
- <C-W><C-K>: 二分割の場合、垂直分割を水平分割に置き換える
- <C-W><C-O>: 現在のウィンドウのみにする(only)
- <C-W><C-C>: 現在のウィンドウを閉じる(close)
lcd
で作業スペースごとに現在のディレクトリを指定する。
tab
- タブはウィンドウのコレクションを格納するコンテナだと考える。
- 仕事をいくつかのワークスペースに区切ることができる。
- 急な案件や、全く別の仕事を始めたい時にタブを活用して全く別の作業空間を作り出す使い方をする。
- 多くのソフトウェアにおける、「新しいウィンドウ」のイメージ。「タブ」という名前だが、多くのソフトウェアのそれとは別物であることに注意。
:tabedit {filename}
<C-W>Tで新たにウィンドウを開く- 移動は
gt
(反対はgT) - <C-PageUp>(<C-PageDown>)でも切り替えられる。
続きます。