はじめに
昔はvimのプラグインをよく使用していました。
しかし、プラグインを入れるたびにコマンドを学習するのが面倒になってきました。
プラグインがないとできないことは当然ありますが、プラグインを使えない環境で作業をすることがありますので、最近はプラグイン武装することよりもvim機能をもっと知ることに注力しています。
ファイル操作で便利な機能やプラグインに頼らなくてもできることなどをまとめていこうと思います。
コーディング中やコードを調査するときに便利な移動機能
個人的に便利だと思う移動機能。
キーバインド | 挙動 |
---|---|
% | 対応する括弧に移動 |
[m | (上方向に移動)関数を定義している箇所に移動する |
]m | (下方向に移動)関数を定義している箇所に移動する |
m <任意のキー> ex) ma | 現在のカーソル箇所にマークをつける |
` <マークをつけたキー> ex) `a | マークをつけた場所に移動する |
g, | 最後に修正した場所への移動 |
vimgrepで色んなものをgrep
普通のエディタと同じくvimにもvimgrepと呼ばれるgrep機能が備わっています。
私はtaglistプラグインが使えない環境でメソッドの一覧をみたい時に下記のようにvimgrepをよく使います。
:vimgrep /public function/ % | cw
ちなみに%は現在開いているファイル名のことを指します。
vimにはレジスタ編集中のファイル名やヤンク(コピー)した文字列の情報などをためこむ収納庫のようなものがあり、%はファイル名が保存されています。
興味のある方は:reg
で確認してみてください。
vimgrepに関しては下記の記事が参考になると思います。
vimgrepとQuickfix知らないVimmerはちょっとこっち来い
Tabを活用する
vimコマンドはパイプで組み合わせて使うことが出来るので、:tabnew | edit /home/xxx/xxx.txt
とeditコマンドで新しいタブでファイルをしたり、:tabnew | b 1
新しいタブにバッファーに展開されているファイルを流し込んだりできます。
Tabの切り替えコマンドは沢山存在しますが、下記のコマンドで大体のことが代用できると思います。
キーバインド | 挙動 | Link |
---|---|---|
gt | Tabを次のタブに切り替える | http://vim-jp.org/vimdoc-ja/tabpage.html |
{Tab番号}gt | Tabを指定したTab番号のタブに切り替える |
{Tab番号}gt
を使うのならTab内にTab番号が表示されていたほうが分かりやすいかもしれませんね。
.vimrcファイルに下記のように設定するとTab番号が表示されます。
Tab番号 : [ファイル名] のフォーマットになるような設定です。
colo desert
" カレントタブをハイライトhi TabLineSel ctermbg=1" タブにフルパスでなく、ファイル名のみを表示する settabline=%!MyTabLine()" 常にタブラインを表示 setshowtabline=2function! MyTabLine()let s =''foriin range(tabpagenr('$')) " ラベルは MyTabLabel() で作成するlet my_tab_label ='%{MyTabLabel(' . (i+1) . ')}' " 強調表示グループの選択ifi+1== tabpagenr()let s .='%#TabLineSel#'elselet s .='%#TabLine#'endif " タブ番号 : [ファイル名] のフォーマットになるように設定let s .=(i+1) . ':[' . my_tab_label .'] 'endfor " 最後のタブページの後は TabLineFill で埋め、タブページ番号をリセットするlet s .='%#TabLineFill#%T'return s
endfunctionfunction! MyTabLabel(n)let buflist = tabpagebuflist(a:n)let winnr = tabpagewinnr(a:n)return fnamemodify(bufname(buflist[winnr -1]),":t")endfunction
ファイルに書かれているファイルパスからそのファイルを開く
下記のようにファイルにパスが記載されているとします。
...
$filepath = '/usr/local/log/error.log';
...
カーソルをパスの上に合わせて下記のコマンドを実行すると:e /usr/local/log/error.log
などしなくてもerror.logファイルを開くことができます。
キーバインド | 挙動 | Link |
---|---|---|
gf | カレントウィンドウ上でファイルを開く | http://vim-jp.org/vimdoc-ja/usr_22.html |
<Ctrl>w gf | 新しくタブを開いてファイルを開く | http://vim-jp.org/vimdoc-ja/windows.html#CTRL-W_gf |
ファイルをあるときの状態に戻す
ファイルを編集している時にuを連打してファイルを元の状態に戻した経験はありませんか?
Undoブランチを理解すればuをひたすら連打するよりももっとスマートにファイルを戻せます。
http://vim-jp.org/vimdoc-ja/undo.html#undo-branches
http://vim-jp.org/vimdoc-ja/usr_32.html
ファイルの編集中は書いたり消したりという作業を繰り返するのでUndoブランチの分岐点がたくさん出来ます。
u連打でもいいですが、
:earlier {N}f
など様々な戻し方を知っていると便利なこともあるので知っておいて損はないと思います。
ちなみに戻しすぎた場合は、
:later {N}f
で調整してください。
ディレクトリをツリー表示
Windowsのエクスプローラーの様にディレクトリをツリー表示させるのに
Vimのプラグインnerdtreeを使用している方は多いのではないかと思います。
標準のvimでも同じようなことが:edit .
で出来ます。ちなみにこのように表示されます。
" ============================================================================
" Netrw Directory Listing (netrw v109)
" Sorted by name
" Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,*,\.info$,\.swp$,\.o$\.obj$,\.bak$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec
" ============================================================================
../
./
check/
Makefile
autocmd.txt
change.txt
eval.txt~
filetype.txt~
help.txt.info
キーバインド | 挙動 |
---|---|
Enter | ディレクトリを開く |
-(マイナス) | 親ディレクトリに移動 |
d | ディレクトリを作成する |
D | ファイル / ディレクトリを削除する |
R | ファイル / ディレクトリをリネームする |
などなど他にも機能がたくさんあります。
詳しくは下記を参照してください。
キーバンドのリファレンス : http://vim-jp.org/vimdoc-ja/pi_netrw.html#netrw-quickmap
標準のvimでもnerdtreeのようにディレクトリにブックマークをつけることも出来るので結構便利。
最近開いたファイルの一覧を表示する
:ol[dfiles]で最近開いたファイルの一覧を表示することが出来ます。
:ol[dfiles]
ただし、oldfilesコマンドは最近開いたファイルの一覧を表示するだけです。
VimプラグインのMRUのように
過去に開いたファイルの一覧を表示 → 開きたいファイルを選択し移動
という事がしたいのであれば、:bro[wse]と組み合わせて下さい。
:bro[wse] ol[dfiles]
仕組みに興味のある方はhelpのリンクを貼っておきますので、読んでみてください。
viminfo : http://vim-jp.org/vimdoc-ja/usr_21.html#21.3
v:oldfiles変数 : http://vim-jp.org/vimdoc-ja/eval.html#v:oldfiles
外部コマンドを実行する
vimはファイルを開いた状態でも:![コマンド]
で外部(OS)コマンドを実行することが出来ます。
私はPHPのファイルを編集する際、編集の合間でちょこちょこプログラムを実行しながらデバッグします。
:!php -l %
こんな感じ。
終わりに
今後もちょこちょこ編集していきます。