0

これは VI の伝統的な禅に反するかもしれませんが、Vi でキーを再バインドする作業、特に何がバインドできるかできないかということになると、私は非常に圧倒されます。ビジュアルモードを使用して選択/コピー/貼り付けを行ってnvimに移行して以来、特に頭痛がしていました。また、挿入モードで行頭/行末にジャンプするためにHome/Endにアクセスできなくなりました。

これを回避する方法は、tmux 構成で行うのと同じように、コマンドを発行して vimrc のすべてのキーをバインド解除し、すべてを再バインドすることだと考えていました。そうすれば、バインディングとは何かについて混乱することはなく、いつでも簡単に変更して変更を参照できます。私はこれについてすべて間違っていますか?

4

2 に答える 2

2

あなたは本当にこれを行うことはできません. Vim は、「ユーザー定義のマッピング」とは異なる「組み込みのマッピング」を扱います。組み込みのマッピングを実際に「マッピング解除」することはできません。

技術的には、組み込みのマッピングは、 で定義されたユーザー定義のマッピングとは異なる C 構造体に格納され:mapます。を実行すると、ユーザー定義の構造体からそれが削除されるだけです (ちなみに、これがどのように機能するかについては、先週の vi.SEの How to find out what a key is maps to?:unmapで簡単ではあるが不完全な概要を説明しました)。

あなたができる唯一のことは次のようなものです:

" Remap all ascii characters; everything below 33 is a control character
for i in range(33, 127)
        " | needs some extra love
        if i == 124 | continue | endif
        execute 'nnoremap ' . nr2char(i) . ' <Nop>'
        execute 'nnoremap <C-' . nr2char(i) . '> <Nop>'
endfor

" The above won't remap stuff like `<F1>`, `<Up>`
nnoremap <Bar> <Nop>
nnoremap <F1> <Nop>
nnoremap <Up> <Nop>
" ... etc ... You can use a loop for this as well...

" Now make our own mappings 
nnoremap : :

" ...etc...

などについても同じですが、これは、などvnoremapを再マップしないため、さらに例外を追加する必要があります (これらのマッピングの「2 番目のキー」は構造体ではなく、/です) !)<C-w><C-w>gJswitchcase

でも。これをしないでくださいあなただけが理解できるvimrcに頼ってください。デフォルトのマッピングを学ぶだけです。これは、Vim のインストールをすぐに使用できることを意味し、マッピングはデフォルトのマッピングよりも「優れた」ものにはなりません。

于 2016-03-24T18:10:27.883 に答える
1

すべてのオプションをデフォルト値vimrcにリセットするには、次の行を先頭近くに置くことができます。

set all&

ただし、次の理由から、単一のコマンドで「デフォルトのバインド」を「バインド解除」することは現実的に期待できません。

  • それらは「バインディング」ではなく、「コマンド」です。
  • とにかくそのようなコマンドはありません。

すべてのデフォルト コマンドを<nop>( :help <nop>) に再マップすることもできますが、それはたいへんな作業のように思えますが、メリットはほとんどありません。

于 2016-03-24T17:59:35.187 に答える