ターミネーターでのctrl-backspaceのマッピング


8

私は最近Vimを使い始めました。以前の編集者からは、Ctrl- を押して単語全体を削除することに慣れていBackspaceます。ドキュメントを見たところ、これはVimでCtrl- wを押すことによって行われていることがわかりました。問題は、Ctrl- に慣れた後w、単語のスペルを間違えるたびにタブとチャットを閉じ始めたことです(この質問を書いている間、このタブを5回閉じました)。だから私はVimでキーをマップする方法をチェックしてこれを試しました:

:imap <C-BS> <C-w>

残念ながら、うまくいきませんでした。少し調べた結果、ターミナルではCtrl- Backspaceとを区別できないことがわかりましたBackspace。この問題を修正するためのハックとパッチをいくつか見ましたが、ターミネーター(使用したいエミュレーター)でそれらを動作させることができませんでした。

マップする方法はありますかCtrl- Backspaceターミネーターを使用しているときにVimで?


2
Vim hellへようこそ。
romainl 2013

2
この地獄は非常に生産的であり、パッチで改善できるという事実が好きです。
インゴカーカット2013

ところで、私はこの種の質問を集めて、うまくいけば、この特定の問題がVim 8.0で対処されていると主張できるようになりました。マッピング候補もどんどん統一して欲しいです。
インゴカーカット2013

この問題は、vim(AFAIK)では実際には修正できません。これは、vimが実行されているターミナルによって異なります。vteを使用するさまざまなユーザー(Gnoneターミナル、Mateターミナル、Guakeなど)に対して、この問題は最近注目されており、まもなく修正される可能性があります。このgnomeバグを参照してください:bugzilla.gnome.org/show_bug.cgi
id

@IngoKarkat上記のコメントを参照してください。^
trusktr 2013年

回答:


8

キーボード入力が内部的に処理される方法のため、残念ながら今日これは一般的に不可能です。Ctrl+非アルファベットのような一部のキーの組み合わせはマッピングできず、Ctrl+文字とCtrl+ Shift+文字を区別できません。(端末が明確なtermcapコードを送信しない限り、ほとんどのコードはそうではありません。)挿入モードまたはコマンドラインモードで、キーの組み合わせを入力してみてください。何も起こらない、または挿入されない場合、そのキーの組み合わせは使用できません。これは<Tab>/ <C-I><CR>/ <C-M>/ <Esc>/ <C-[>などにも適用されます(例外は<BS>/ のみ<C-H>です)。これは既知の問題点であり、vim_devおよび#vim IRCチャネルに関するさまざまな議論の主題です。

一部の人々(主にPaul LeoNerd Evans)は(これをサポートする端末のコンソールVimでも)これを修正したいと考えており、さまざまな提案を提案しています。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

しかし、現在のところ、パッチやボランティアはまだ出ていませんが、多くの人が将来のVim 8メジャーリリースでこれを実現したいと望んでいます。


素早い回答ありがとうございます。vimにはctrl-wを、ブラウザにはctrl-backspaceを使用することに慣れる必要があると思います。
user1026044 2013

Ctrlキーを押しながらWの良いところは、それはまた、などバッシュで動作することである
インゴKarkat

ええ、私は知っています。ただし、それ以外の場合は引き続きctrl-backspaceを使用する必要があり、ctrl-wは他のすべての場所でタブやウィンドウを閉じるための標準であるように見えるため、煩わしくなります。しばらくは慣れるでしょう。
user1026044 2013

しかし、これは純粋にvimコードベースで解決できますか?それが実行されている端末がいずれかのキーの組み合わせに対して同じ正確な入力をvimに送信する場合、vimコードベースのコードはどのようにしてバックスペースとctrl + backspaceを区別しますか?これはvimではなく、vimが実行されている端末で修正する必要があるもののようです。たとえば、Guake ^?はバックスペースとctrl + backspaceの両方を送信するため、それら(AFAIK)を区別できなくなります。一方、xtermは、^Hバックスペースと^?ctrl + backspaceを送信して、区別できるようにします。
trusktr 2013年

しかし、残念ながら、xtermでは、バックスペース(^H)はctrl + h(^H)と区別できません。おそらく、3つすべてを区別できる新しいエスケープシーケンスを作成できますか?それがどれほど簡単かはわかりませんが、現在の状態(一部の端末^?はバックスペースに使用し、他^Hはその逆)で、非常に多くの端末アプリを想像することができないため、安全に実行できると思われます(もしあれば)ctrl + backspaceシナリオを検討してください(ターミナルの種類により完全に不確定です)...
trusktr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.