Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vimの便利な画面分割&タブページと、それを更に便利にする方法

$
0
0

この記事はVim Advent Calendar 2013 : ATNDの99日目の記事です。

画面分割・タブページのススメ

みなさん、分割してますか?
みなさん、タブページ使ってますか?

僕はどちらも大好きです。

  • サンプルを見ながら写経する
  • TODOやメモを見ながら編集
  • 関数の定義元などを見ながら編集
  • 編集目的に合わせてタブを分ける

などなど。 ものぐさな僕は、コードを書くときはガシガシ分割したりしながらコードを書いています。

これらの機能は当然設定やプラグインの導入などをしなくても使えますが自分はsキーをprefixとしたキーマッピングをしています。
元は<C-w>の代わりにsを使っていただけですが、タブウィンドウ関連やバッファ関連にも使うようにしたことで、格段に便利になりました。自分の設定例を合わせて掲載するので、良ければ参考にしてください。

各種機能とマッピング

ウィンドウを分割する

sn.gif

項目名デフォルトオリジナル設定
水平分割:splitss
垂直分割:vsplitsv

分割したウィンドウ間を移動する

sj.gif

項目名デフォルトオリジナル設定
左に移動<C-w>hsh
下に移動<C-w>jsj
上に移動<C-w>ksk
右に移動<C-w>lsl
次に移動<C-w>wsw

分割したウィンドウそのものを移動する

sK.gif

項目名デフォルトオリジナル設定
左に移動<C-w>HsH
下に移動<C-w>JsJ
上に移動<C-w>KsK
右に移動<C-w>LsL
回転<C-w>rsr

カレントウィンドウの大きさを変える

so.gif

項目名デフォルトオリジナル設定
縦に最大化<C-w>_なし
横に最大化<C-w>パイプなし
縦横最大化なしso
大きさを揃える<C-w>=sOもしくは s=
幅を増やす<C-w>>s>
幅を減らす<C-w><s<
高さを増やす<C-w>+s+
高さを減らす<C-w>-s-

テーブル内で|を表示すると崩れるみたいなので、パイプと表記してます。

またs>系のマッピングは、実際には「vim-submode」というプラグインを使ってs>>>などでサイズ変更出来るようにしてます。詳しくは最後のVimrcを参照してください。

タブページ関連

tab.gif

項目名デフォルトオリジナル設定
新規タブ:tabnewst
次のタブに切替gtsn
前のタブに切替gTsp

閉じる

項目名デフォルトオリジナル設定
ウィンドウを閉じる:qsq
バッファを閉じる:bdsQ

Unite.vim

unite.png

項目名デフォルトオリジナル設定
タブ一覧:Unite tabsT
現在のタブで開いたバッファ一覧:Unite buffer_tabsb
バッファ一覧:Unite buffersB

当然ですが「unite.vim」が必要です。

最後に

ウィンドウとバッファとタブページについて

バッファはファイル等の内容そのもの。
ウィンドウはバッファを表示するもので、別ウィンドウで同じファイルを開いて編集したり出来る。
タブページはウィンドウを束ねるもの。

詳しくは「Vim のバッファとウィンドウを理解する - 反省はしても後悔はしない」で解説されています。
この記事も去年のVACの記事ですね。歴史長い!

sキーの元々の機能について

今回潰したsキーには元々割り当たっている機能がありますが、ヘルプに書かれている通り、他で代用が効くので気にせず潰しています。
まったく別のマッピングをする場合でもsキーはかなり押しやすい位置にあるので、マッピング先に便利でおすすめです。

["x]s [count] 文字を [レジスタ x に入れ] 削除し、挿入を始め
る (s は Substitute --置換 を意味する)。"cl" と同義で
ある (行単位でない|linewise|)。

vimrc

最後に、当該箇所の自分のvimrcを貼っておきます。

nnoremaps<Nop>nnoremapsj<C-w>jnnoremap sk <C-w>knnoremapsl<C-w>lnnoremapsh<C-w>hnnoremap sJ <C-w>J
nnoremap sK <C-w>K
nnoremap sL <C-w>L
nnoremap sH <C-w>H
nnoremapsn gt
nnoremapsp gT
nnoremapsr<C-w>rnnoremaps=<C-w>=nnoremapsw<C-w>wnnoremapso<C-w>_<C-w>|nnoremap sO <C-w>=nnoremapsN :<C-u>bn<CR>nnoremap sP :<C-u>bp<CR>nnoremapst :<C-u>tabnew<CR>nnoremap sT :<C-u>Unite tab<CR>nnoremapss :<C-u>sp<CR>nnoremapsv :<C-u>vs<CR>nnoremap sq :<C-u>q<CR>nnoremap sQ :<C-u>bd<CR>nnoremapsb :<C-u>Unite buffer_tab -buffer-name=file<CR>nnoremap sB :<C-u>Unite buffer -buffer-name=file<CR>call submode#enter_with('bufmove','n','','s>','<C-w>>')call submode#enter_with('bufmove','n','','s<','<C-w><')call submode#enter_with('bufmove','n','','s+','<C-w>+')call submode#enter_with('bufmove','n','','s-','<C-w>-')call submode#map('bufmove','n','','>','<C-w>>')call submode#map('bufmove','n','','<','<C-w><')call submode#map('bufmove','n','','+','<C-w>+')call submode#map('bufmove','n','','-','<C-w>-')

追記(2014/03/10 8:36)

@hisatake_i
最初の 画像が コロンとセミコロンが間違ってるな。

:;をノーマルモードでのみ入れ替えるマッピングをしているため、画像上では;を打ったと表示されています。紛らわしくてすみません。実際には:を打つ必要があります。

英字キーボードではオススメの設定なので、あわせてどうぞ。

" コロンとセミコロンを入れ替えnoremap : ;

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>