Vim でキーイン モードの動作をカスタマイズしようとしていEnter
ます。Normal
これが私のもの.vimrc
です:
nmap <CR> o<Esc>
nmap <S-CR> i<CR><Esc>
Enter を押したときに現在の行の後に単純に改行を追加しようとしています。ただし、Shift-Enter
組み合わせが押されたときに、現在の行をカーソルで改行したい。
後者は機能しません。押すたびにShift-Enter
、カーソルで改行せずに行を追加するだけです。
Vim でキーイン モードの動作をカスタマイズしようとしていEnter
ます。Normal
これが私のもの.vimrc
です:
nmap <CR> o<Esc>
nmap <S-CR> i<CR><Esc>
Enter を押したときに現在の行の後に単純に改行を追加しようとしています。ただし、Shift-Enter
組み合わせが押されたときに、現在の行をカーソルで改行したい。
後者は機能しません。押すたびにShift-Enter
、カーソルで改行せずに行を追加するだけです。
キーボード入力が内部で処理される方法が原因で、残念ながら、これは現在、Vim の端末バージョンでは一般的に可能ではありません (<S-CR>
すべてのプラットフォームの GVIM と、Windows コンソールの Vim で動作するはずです)。これは既知の問題点であり、vim_dev および #vim IRC チャンネルでさまざまな議論の対象となっています。
一部の人々 (主に Paul LeoNerd Evans) はそれを修正したいと考えており (これをサポートする端末のコンソール Vim についても)、さまざまな提案をしてきました、cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
しかし、今日現在、パッチやボランティアはまだ出されていませんが、多くの人が将来の Vim 8 メジャー リリースでこれを提供したいという希望を表明しています。
<CR>
:通常モードでマップ<CR>
すると、コマンド ライン ウィンドウでの履歴項目の選択や、クイックフィックス/ロケーション リスト ウィンドウのカーソル下のエラーへのジャンプが妨げられます。(以下を追加しない限り:)
:autocmd CmdwinEnter * nnoremap <CR> <CR>
:autocmd BufReadPost quickfix nnoremap <CR> <CR>
:nmap
:使用する必要があります:noremap
。これにより、マッピングが再マッピングと再帰の影響を受けなくなります。
<S-CR> もマップしたかったのですが、マップされたキーストロークに対して Ctrl+V を使用してから <Shift+Enter> を使用して 2 番目のマッピングを追加するまで、CLI モードで動作させることができないことがわかりました。ただし、GVIm が期待どおりに機能するには、まだ <S-CR> マッピングが必要です。これにより、.vimrc スニペットが次のようにレンダリングされます。
nnoremap <CR> o<Esc>
nnoremap <S-CR> i<CR><Esc> " Needed for GVIm
nnoremap ^[0M i<CR><Esc> " Needed for CLI VIm (Note: ^[0M was created with Ctrl+V Shift+Enter, don't type it directly)
これをUbuntu 12.04でテストしました。ハッピービミング!
Vim<S-CR>
は. <S-CR>
_<CR>
別のマッピングを見つけるか、GVim/MacVim に固執する必要があります。
編集
Mac OS X の iTerm.app や Terminal.app などの一部のターミナル エミュレーターでは、特定の文字列をシェルに送信するショートカットを設定できます。その可能性があれば試してみる価値はあるかもしれませんが、移植できないプラットフォーム固有のギズモにすぐに慣れてしまうので、まあ…あまりお勧めしません。