2010/05/31 (月)
vimでのファイル・バッファ・画面分割・タブの切り替え操作まとめ 俺的完全版(vim 7.2対応)
…ただいま編集中
・ファイルを開く(edit系コマンド)
ここで、一つ抑えておきたいのは
vi及びvimでは初期設定では変更途中のファイルを離れて別のファイルを編集することができない
ということ。
つまり、いったん
:write
とするか
:edit!
として変更を破棄するか
:hide edit foo.txt
として明示的に編集中ファイルを隠すかする必要がある。
ファイルを切り替える際、自動で保存するオプションとして
:set autowrite
自動で:hideを付加するオプションとして
:set hidden
がある。以下のnext系コマンド等にも関係する。
・ファイルを切り替える(next系コマンド)
・ファイル操作その他
・バッファ切り替え(next系コマンドとの根本的な違いは謎)
・ウィンドウ分割系
・タブ操作
共通操作
・受けた質問
・set hiddenって必要?
絶対必要です。そういう使い方を一度はマスターしてみたほうが良い。
・vimってファイルを切り替えたり表示したりするのにいちいち「:」の後にコマンド打ってるの?
打つわけありません。
主要なコマンドは全てキーバインドします。
「次のバッファに切り替え」は"<C-n>"とか「ファイルを開く」は"<Space>f"とか。
vimではキーバインドの競合を避けるためにprefixとして「\」キーと「スペース」キーをお勧めします。
「\」はもともとprefixとして用意されているらしいし「スペース」は単なる右移動です。
自分の場合は「\」の後は2文字程度のキーバインドを設定し、「スペース」の後には1文字のキーバインドを割り当てています。
・別にeditとかbnextとか使わなくてもプラグイン使ったほうが便利じゃない?
そんなことないです。
試しに
nmap <Space>b :ls<CR>:buffer
namp <Space>f :edit .<CR>
nmap <Space>v :vsplit<CR><C-w><C-w>:ls<CR>:buffer
nmap <Space>V :Vexplore!<CR><CR>
をvimrcに書き込んでみて下さい。
「スペース→b」でバッファ一覧が表示されて番号指定してenterキーでバッファに移動できます。
「スペース→f」でデフォルトのファイルエクスプローラが開きます。
「スペース→v」は縦分割してバッファ切り替えとかファイルを開くとかできます。
少なくとも、bufexplor.vimとかopsplorer.vimとかの機能を最低限でしか使ってない場合は上記の設定でも十分なはず。むしろ軽快だし相性問題が起きないのでこっちのほうが扱いやすい。
vimのデフォルト機能をキーバインドで組み合わせるともっともいろいろできる。
以前は調子に乗って20個くらいのプラグインを使っていたが、ファイル・バッファ操作関連は相性でエラーを出しやすいのでほとんど止めた。
特にminibufexpl.vimとfuzzyfinderとvimExplorer.vimの相性の悪さは最悪だった。
ファイル操作系プラグインは同時に複数使わず、必要に応じて呼び出す程度が良い。
viってのはコマンドとコマンドの組み合わせで無限大の動きをするので、全てを説明するには無理がある。
例えば、2つのファイルを左右に開く場合
%vi 1.txt 2.txt
:vs #2
%vi 1.txt 2.txt
Ctrl-w v
:n
%vi 1.txt
:vs 2.txt
ってな感じでいろんな方法がある。
上下に開くなら
%vi -o 1.txt 2.txt
で開ける。
…ただいま編集中
・ファイルを開く(edit系コマンド)
キー操作 | 動作 |
:edit hoge.txt :e hoge.txt |
hoge.txtを開く。eはeditの短縮形。 |
:edit! hoge.txt | 編集中ファイルの変更を破棄してhoge.txtを開く |
:hide edit hoge.txt | 編集中ファイルを隠してhoge.txtを開く |
:edit . | こうするとファイルエクスプローラが起動する :edit /home/hoge/とかもできる |
ここで、一つ抑えておきたいのは
vi及びvimでは初期設定では変更途中のファイルを離れて別のファイルを編集することができない
ということ。
つまり、いったん
:write
とするか
:edit!
として変更を破棄するか
:hide edit foo.txt
として明示的に編集中ファイルを隠すかする必要がある。
ファイルを切り替える際、自動で保存するオプションとして
:set autowrite
自動で:hideを付加するオプションとして
:set hidden
がある。以下のnext系コマンド等にも関係する。
・ファイルを切り替える(next系コマンド)
キー操作 | 動作 |
:next :n |
複数ファイルを編集中、編集対象を次のファイルに切り替える nはnextの短縮形 |
:previous :Next :N |
前のファイルに切り替える |
:first | 先頭のファイルに切り替える |
:last | 末尾のファイルに切り替える |
:next hoge.txt | 編集中のファイルをhoge.txtに切り替える TABキーを連打してみると良いかも |
:next # Ctrl-^ |
前回編集ファイルに切り替え :filesをしてみると#がついているファイル |
:next #3 3Ctrl-^ |
編集中のファイルを番号に切り替える 番号は:filesに対応する |
:wnext | 現在のファイルを保存してから次のファイルに切り替える |
・ファイル操作その他
キー操作 | 動作 |
:files :ls |
開いているファイル(バッファ)一覧を表示 |
:args | 開いているファイル(バッファ)一覧を簡易表示 |
:read hoge.txt :r hoge.txt |
カレント行にhoge.txtを読み込む |
:edit . | ファイルエクスプローラとして使える :e ~TABキー とかも便利 |
:Explore[!] | ファイルエクスプローラを起動 |
:Hexplore[!] | 水平分割してファイルエクスプローラを起動 |
:Rexplore[!] | |
:Sexplore[!] | |
:Texplore[!] | |
:Vexplore[!] | 垂直分割してファイルエクスプローラを起動 |
・バッファ切り替え(next系コマンドとの根本的な違いは謎)
キー操作 | 動作 |
:buffers | バッファリストを表示する bdeleteで削除されたバッファは表示されない :filesや:lsと同じ |
:buffers! | 全てのバッファを表示する :bdeleteされたバッファが表示される |
:bnext :bn |
次のバッファに切り替える |
:bprevius :bp :bNext :bN |
前のバッファに切り替える |
:bfirst :bf :brewind :br |
先頭のバッファに切り替える |
:blast :bl |
末尾のバッファに切り替える |
:bdelete :bd |
現在のバッファをリストから削除する |
:bwipeout :bw |
現在のバッファを完全に削除する |
:buffer 3 | 指定のバッファに切り替える |
:buffer hoge.txt | 指定のバッファ(曖昧表現可)に切り替える TABを連打すると良い |
:sbuffer hoge | 分割して指定のバッファに切り替える |
:sbnext | 分割して次のバッファに切り替える |
:bdelete 3 | 指定のバッファをリストから削除する |
・ウィンドウ分割系
キー操作 | 動作 |
:split :sp Ctrl-w s |
横分割 |
:vsplit :vs Ctrl-w v |
縦分割 |
:ball :ba |
すべてのファイルをウィンドウで開く |
Ctrl-w [wW] | カーソルをウィンドウ間で次々と移動 |
Ctrl-w [hjklp] | カーソルをウィンドウ間で移動。 |
Ctrl-w [tb] | カーソルを一番上(下)のウィンドウに移動 |
Ctrl-w p | |
:only Ctrl-w o |
カーソルがあるウィンドウのみにする |
:close Ctrl-w c |
カーソルがあるウィンドウを閉じる |
Ctrl-w q | カーソルがあるウィンドウを終了する? |
:new Ctrl-w n |
横分割して新規バッファを作成 |
:vnew | 縦分割して新規バッファを作成 |
Ctrl-w [HJKL] | ウィンドウを移動 |
Ctrl-w [rR] | ウィンドウをスワップ |
Ctrl-w [+-] | ウィンドウの高さを変更 |
{数値}Ctrl-w _ | ウィンドウの高さを指定 |
Ctrl-w = | 全てのウィンドウサイズを同じにする |
・タブ操作
キー操作 | 動作 |
vim -p 1.txt 2.txt | ファイルをタブで開く |
g[tT] | タブを移動 |
:only | |
:close | |
:tabnew | |
:tabmove | |
:tabfirst | |
:tablast |
共通操作
キー操作 | 動作 |
qall qa |
全て閉じる |
wqall | 全て保存して閉じる |
・受けた質問
・set hiddenって必要?
絶対必要です。そういう使い方を一度はマスターしてみたほうが良い。
・vimってファイルを切り替えたり表示したりするのにいちいち「:」の後にコマンド打ってるの?
打つわけありません。
主要なコマンドは全てキーバインドします。
「次のバッファに切り替え」は"<C-n>"とか「ファイルを開く」は"<Space>f"とか。
vimではキーバインドの競合を避けるためにprefixとして「\」キーと「スペース」キーをお勧めします。
「\」はもともとprefixとして用意されているらしいし「スペース」は単なる右移動です。
自分の場合は「\」の後は2文字程度のキーバインドを設定し、「スペース」の後には1文字のキーバインドを割り当てています。
・別にeditとかbnextとか使わなくてもプラグイン使ったほうが便利じゃない?
そんなことないです。
試しに
nmap <Space>b :ls<CR>:buffer
namp <Space>f :edit .<CR>
nmap <Space>v :vsplit<CR><C-w><C-w>:ls<CR>:buffer
nmap <Space>V :Vexplore!<CR><CR>
をvimrcに書き込んでみて下さい。
「スペース→b」でバッファ一覧が表示されて番号指定してenterキーでバッファに移動できます。
「スペース→f」でデフォルトのファイルエクスプローラが開きます。
「スペース→v」は縦分割してバッファ切り替えとかファイルを開くとかできます。
少なくとも、bufexplor.vimとかopsplorer.vimとかの機能を最低限でしか使ってない場合は上記の設定でも十分なはず。むしろ軽快だし相性問題が起きないのでこっちのほうが扱いやすい。
vimのデフォルト機能をキーバインドで組み合わせるともっともいろいろできる。
以前は調子に乗って20個くらいのプラグインを使っていたが、ファイル・バッファ操作関連は相性でエラーを出しやすいのでほとんど止めた。
特にminibufexpl.vimとfuzzyfinderとvimExplorer.vimの相性の悪さは最悪だった。
ファイル操作系プラグインは同時に複数使わず、必要に応じて呼び出す程度が良い。
viってのはコマンドとコマンドの組み合わせで無限大の動きをするので、全てを説明するには無理がある。
例えば、2つのファイルを左右に開く場合
%vi 1.txt 2.txt
:vs #2
%vi 1.txt 2.txt
Ctrl-w v
:n
%vi 1.txt
:vs 2.txt
ってな感じでいろんな方法がある。
上下に開くなら
%vi -o 1.txt 2.txt
で開ける。