GNU画面でのvimのCTRL- *の修正


10

GNU画面でvimを実行するCTRLと、矢印キーとPg *キーの組み合わせが期待どおりに機能しないことがわかりました。

Ubuntu 10.10 vim-gnomeパッケージを使用しています。

Ubuntuを実行している別のマシンでは、これは問題なく動作しました。残念ながら、私はそのような構成を利用できません。

ここに関連する質問があります:VimでCtrl +矢印を修正する方法?

ただし、推奨される解決策は、ターミナルエミュレーターで動作するようにvimのキーバインディングを再マップすることです(その場合はPuTTY)。私はそのようなことをしたことを覚えていませんし、この問題を解決する画面構成オプションがあると思われます。

gnu-screenメーリングリストには、vim viaを実行することが適切な修正または回避策であることを示唆するスレッドもあります$ TERM=xterm vim。これは機能しますが、副作用があるかどうか少し心配です。また、私が他のマシンでセットアップしたソリューション(ソリューションが必要な場合)になるには、あまり馴染みがありません。


+1-私は同じ問題を抱えていた-あなたが示唆したように- term xterm私の~/.screenrcファイルに追加するとそれが修正された。再度、感謝します!
ジャスティンエティエ

回答:


4

直感的に彼のアップデートで述べたようにterm xterm~/.screenrcファイルに追加することでこの問題は修正されるようです。


ええと、はい。しかし、なぜ環境変数をでオーバーライドするのでscreenはなく、単に$TERM環境変数を伝播しないのかについて、ある種の説明を差し控えてい"screen"ます。おそらく、が重要であるいくつかの状況があります$TERM == screen
2011

3
@intuited:Screenが設定さTERM=screenれる理由は、内部で実行されているアプリケーションがScreen端末内で通信しているためです。アプリケーションが送受信する制御シーケンスはScreenのものであり、Screen自体が表示されているものではありません。Screenセッションを切り離して別のタイプの端末に再接続できるため、この間接層が必要です。
Gilles 'SO-悪をやめる'

@ギレス:ありがとう、私はそのようなものを疑った。にリセットすると、どのような問題が発生する可能性がありxtermますか?
2010年

1
xtermとscreenはほとんど互換性があるため、それほどではありません。ただし、それぞれに他の機能にはないいくつかの機能があり、アプリケーションにうそをつくと、実際には機能しない機能を使用する可能性があります。infocmp screenand の出力infocmp xtermと、画面エスケープシーケンスxtermエスケープシーケンスと比較します。提供する内訳はありません。ほとんどのアプリケーションは気にしないでしょうが、いくつかは煩わしい動作をするかもしれません。
Gilles「SO-邪悪なことをやめ

2

実行中のプロセスで機能する端末を設定するには、他にもいくつかの方法があります。

  • 実行中の画面インスタンスで^A- :を押してコマンドterm xtermを発行すると、そのインスタンスで新しく開いた画面が、$TERM環境変数がに設定された状態で起動しxtermます。これは次に、呼び出されたvimインスタンスに伝播します。これらのvimインスタンスは、CTRLコンボに関して適切な動作を表示します。この戦略の副作用はまだ発見していません。このコマンドは既存の画面には影響しません。もちろん、このコマンドは~/.screenrcファイルで使用できるため、この方法が他のマシンで使用された可能性があります。

  • 実行中のvimインスタンスでは、コマンドset term=xtermはそのvimインスタンスでCTRL-comboを機能させます。これには、私がまだ理解していない理由により、Xクリップボード(つまり@*および@+)を切断するという副作用があります。興味深いことに、コマンド:set term=screenがで始まるvimインスタンスで実行された場合にも、クリップボードの副作用が発生し$TERM=xtermます。


この答えはOPの更新から取られました。私がやったことは、少しだけ再フォーマットと言い換えを行うことでした。
phunehehe

2

根本的な問題はscreen、実際の端末(TERM外部の環境変数によって識別されるscreen)と内部のエミュレーションの間で行われるマッピングscreenが不完全であることです。

vttestまたはを使用して)偶然にそれをテストすると、

  • 特殊キー

これらの問題をterminで修正しようとする.screenrcと、特定の実際の端末に対してのみ機能し、他の端末の実装に移植できないという欠点があります。ドキュメントノート

デフォルトではない目的のために、termコマンドの使用はお勧めしません。

screen ドキュメントのこの機能を使用して、別の解決策があります(欠点は異なります)

screenが自分自身の端末名を見つけようとすると、最初にscreenという名前のエントリを探します。term、ここでterm$TERM変数の内容です。そのようなエントリが存在しない場合は、screenが試行しますscreen(またはscreen-w、端末の幅が広い場合は(132 cols以上))。このエントリも見つからない場合vt100は、代替として使用されます。

ncursesは、画面のマッピングの問題を修復するために、この場合の便利な代替端末の説明をいくつか提供します(例:screen.xterm-new)。実際には、を使用しTERM=xterm-new、screenを実行すると、ファンクションキーの使用可能なマッピングを取得します。

画面のterm設定に戻って参照すると、テスト中に、マッピングにまだ問題があることに気付く場合があります。これらの代替方法で対処されます。を使用して正確な端末記述を取得することが可能である場合term、これらの代替手段はへの単純なエイリアスになりscreenます。ではない。

ncursesは(sic)を提供しませscreen.xterm

  • TERM=xtermxtermとは異なる端末エミュレータでは広く使用されています。このマッピングを追加しても、状況が悪化するだけです(たとえば、ncurses FAQのTERMを "xterm"に設定して使用しないのはなぜですか?
  • 代替名screen.xtermがリモートシステムにインストールされる可能性は低くなります(ターミナルデータベースの2015年6月からの変更コメントを参照)。

ただし、全体として、代替名の使用は、での使用よりも改善されています。作成するよりも多くの問題が解決さtermれます.screenrcterm設定の逆も同様です。

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