emacs
ターミナルでorg-modeを使用し、Shift
カーソルと一緒に、などのAlt
文字を入力します。私は気づき、端末にもこの動作が表示されました。2A
2B
3A
vim
この動作を変更できる端末設定はありますか、それともemacsとvim自体の設定ですか?
Gilesのアドバイスに関するフォローアップ:
端末エミュレータはKDEコンソール。提供されたいくつかのアドバイスのためにメニューに行き、 と の とオプションをSettings->Configure Shortcuts
無効にしました。Shift+Left
Shift+Right
Previous Tab
Next Tab
Emacs
Shift+Left -> ^[2D
Shift+Right -> ^[2D
Alt+Left -> ^[3D
Alt+Right -> ^[3C
ウィム
Shift+Left -> ^[[1;2D
Shift+Right -> ^[[1;2C
Alt+Left -> ^[[1;3D
Alt+Right -> ^[[1;3C
答え1
この質問に対するGilesのコメントと、より多くのWeb検索に関するアドバイスに従い、このリンクを見つけました。https://github.com/bendikro/emacs-conf/blob/master/emacs-conf/key-bounds.el一部のセクションでは、キーを適切に定義します。
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; Fix for screen / tmux
;; some snipped code
;; Fix ALT + arrow keys inside screen/tmux
(define-key input-decode-map "\e[1;3A" [M-up])
(define-key input-decode-map "\e[1;3B" [M-down])
(define-key input-decode-map "\e[1;3C" [M-right])
(define-key input-decode-map "\e[1;3D" [M-left])
私もコピーして修正しましたが、Shift
今はうまくいくようです。
答え2
端末と統合されたアプリケーション自体の設定です。
Xtermは、拡張キーイベントをパラメータ付き制御シーケンスに送信するDEC VT動作をエミュレートします。多くの素朴なプログラムは、キーボード制御シーケンスがパラメータを持たない単純な制御シーケンスであると誤って予想しているため、正しくデコードできません。それらのいくつかはあまりにも素朴で、真ん中と最後の文字を正しく見つけることができません。制御シーケンスの一部だけをデコードし、残りは通常の入力として扱い、現在見ているような奇妙な状況を引き起こします。
vimはこれらのキーボードシーケンスを正しくデコードすることができ、それを確認する方法についてはxterm-modifier-keys
オンラインヘルプセクションを参照してください。
vimのようにtermcap変数を設定する必要はありませんが、nvimの場合も同様です。
違いは、このようなアプリです返品端末にいると思うように依頼アプリケーションカーソルキーモードそしてアプリケーションキーボードモード。通常、端末は次の場所にあります。ノーマルカーソルキーモードそして通常のキーボードモード。これらのアプリケーションは、端末に制御シーケンスを印刷し、端末に一定期間モードを切り替えるよう指示する。
答え3
端末記述(TERM
設定が「xterm」であると仮定)は、必要な情報を提供します(たとえば、前の説明を参照)。xterm+pcfkeys
入り口)。
xterm1999年から(そして数年後に始まった模倣者konsoleとgnome-terminal - 参照xterm FAQ)は、Shift、Control、Alt、およびMeta修飾子を使用して拡張機能キーセットを提供します。
Shift、Control、またはAltが設定されているかどうかを示すパラメータをファンクションキーに追加します。このコードは、PCキーボード付きのDEC VT510の説明に基づいています。
xtermがDEC VTを「模倣した」かどうかはもちろん、議論の余地があります。当時は自由に使用できるマニュアルがなかったので、「説明」は電子メールで数行のテキストで書かれていました。いくつかの変更が予想されます。
初期動作が変更されました2002年、xtermが使用する修飾子を示す2番目の引数として数字を送信します(「1」の後に、emacsは反復回数として解釈できます)。
konsoleを参照するvimとemacsの後続の例は非常に興味深いものです。
- 両方用語キャップつまり、(詳細は用語情報10年以上説明されましたが、これらのプログラムのどれも実際にはそうではありません。使用端末の説明のため名前これらの関数を参照するファイルはtermcapファイルにありません(見つからない可能性があります)。
- どちらのプログラムにもvimのドキュメントなど、いくつかの回避策があります。xterm-シフト-キー、xterm修飾キー、xtermコード。 Emacsの場合、ドキュメントはそれほど簡潔ではありません(キーマップに関するディスカッションはい)しかし、ソースコードを読むことは役に立ちます。lisp/term/xterm.el
- 興味深いことに、emacsのエコーはvimのエコーとは異なり、電子は古くて役に立たない動作に似ています。旧式の日だけでなく、 konsole と gnome ターミナルの開発者もこれをコピーして、10 年以上にわたって xterm の変更を追跡していませんでした(その結果、多数のバグレポートが作成されました)。 emacsソリューションはこれらの結果かもしれません。