Ctrl-Wを使用せずにVimでスプリットを操作するにはどうすればよいですか?


24

私の端末では、Ctrl+ を入力することはできませんW。これは、端末タブを閉じるためのショートカットだからです。

分割を使用するのが好きですが、を使用しないと分割を行う方法が見つかりませんC-W。これにより、タブを使用せざるを得ませんでした。これはgtgTまたは#gtで数字を切り替えることができるためです。

mouse=a私の端末はそれをサポートしていないため、どちらも使用できません。

Ctrl+ WコンボなしでVimでスプリットを操作するにはどうすればよいですか?


1
マッピングを使用して、wincmd たとえば、マッピングすることができます: :nmap wj :wincmd j<cr>それは同じ動作CTRL-W jをします(下のウィンドウに移動) :help wincmd
アレックスクロール

@AlexKrollなぜそれを回答として投稿しないのですか?:
マーティントゥルノイ

1
@Carpetsmokerこの問題の完全なカバーではないと思います。CTRL-W jカウンターで動作します(現在から下のn番目のウィンドウに移動)私のソリューションは動作しません。
アレックスクロール

2
私は通常、このようなアドバイスに感謝しませんが、別の端末を探します。<C-W>(Vimの多くの場所だけでなく、bashでも)没収するには便利すぎるショートカットです。私は他のキーバインディングが端末によって消費されていることに興味があります- <C-T>?少なくとも、これらが端末で構成可能かどうかを調べます。
-tommcdo

回答:


23

次の<C-w>例のように、別の組み合わせに再マッピングできます。

:nnoremap <C-e> <C-w>

これで使用でき<C-e>、を押したように動作します<C-w>

これにより、デフォルトの<C-e>マッピングが上書きされます(スクロールダウン)。Vimはすでにキーボードのすべてのキーを使用しています。これを防ぐ唯一の方法は、リーダーキーを使用することです。リーダーキーは「プレフィックス」のように機能します。

:nnoremap <Leader>w <C-w>

再マップしていない限り<Leader>\w(相互に)使用できるようになりました。CTRL +キーの組み合わせが好きではないので、実際にこれを好みます。

参照してください。<リーダー>とは何ですか?および <Leader>の設定を確認するにはどうすればよいですか?そして、<Leader>を再マップすることは可能ですか?


私の問題を解決します。vimrcにマッピングを追加し、問題なくビットをテストしました。
Mateon1

13

短縮形を入力する方が簡単だと思うので:wincmd、実際にはCtrl+ よりも頻繁に使用しています。W:winc

たとえば、Ctrl+に相当するのW L:winc lです。


7

私は次のリマップをセットアップしました.vimrc

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

これでCtrl+h、左ウィンドウCtrl+lへの移動、右ウィンドウへの移動などに使用できます。Vimの通常のナビゲーションに論理的に適合するようです。


4
これはバックスペースキーであることが多いため、端末でのCtrl + hのマッピングが常に機能するとは限らないことに注意してください。この回答この質問をご覧ください。
マーティントゥルノイ

また、nnoremap <cr> <c-w>w通常モードではリターンキーがあまり使用されないため、を使用することもできます。その後、分割を循環するのは簡単です。
希望

5

分割に対処するために、私は実際に非常に便利なサブモードプラグインを使用します。これにより、新しいキーバインディングを定義する新しいモード(通常モード、ビジュアルモード、挿入モードなどの「モード」)を作成できます。 。

これにより、Ctrl+wもう使用する必要がなく、新しいモードですべてのキーを自由にバインドできます。「くそー、意味としてまだマップされていないキーの組み合わせが見つかりません」 」

通常のプラグインマネージャーを使用してプラグインをインストールできます。ここにいくつかのインスピレーションを与えるための構成をいくつか示します。


WindowsModeスプリットを操作するために呼び出した新しいモードを作成しました。

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

これらの行は、でモードに入り、でモードLeaderkを終了することを意味しますLeaderLeaderkすべてのキーを押すと、次のようになります。

  • このモードでマッピングを定義していない場合は何もしません
  • このモードでそれらをマップすることにしたことを行います(残りの答えを参照)
  • ヒットしたら通常モードに戻る Leader

WindowsModeこれらの行に入ったら、次のhjklように分割をナビゲートしますCtrl+whjkl

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')

これらの行を使用して、ウィンドウを/andで分割しました!

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

そしてqスプリットを閉じます:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

で分割を移動しますCtrlhjkl

call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')

Vimサブモードでは、多くの強力なことができます。詳細については、ドキュメントを参照してください。


編集ウィンドウサブモードの別のアプローチをここで説明します。著者が使用した方法は質問に答えるのにさらに近いと思います:ここでは新しいモードを作成するために使用され<c-w>somethingますが、サブモードで同じキーを使用してすべてのマッピングを使用できます。

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

この方法では、すべてのマッピング<c-w>lowerCaseKey<c-w>upperCaseKey<c-w><c-Key>およびマッピングは<c-w>=_+-<>接頭辞なしで、すべてのウィンドウモードでアクセスできます<c-w>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.