5

私は、emacs に切り替えようとしている長年の vim ユーザーです。

私はviper-modeemacsで使用しており、ESCを入力し続け(挿入モードを終了するため)、次にキーを入力します(たとえば、j)。私は速くタイプし、同時にそれらを打つことがよくあります。Emacs は、私がヒットしていると考えMETA-j、意図しない関数を実行します。

オプションをメタとして使用するのが好きで、viper を使用しているときに ESC をメタにすることは気にしません。

viper モードでメタとしての ESC を完全に無効にする方法について提案がある人はいますか?

私が試したいくつかの関連オプションを次に示します。これらのどれも問題を解決しません。

(setq viper-no-multiple-ESC t)                                                                                   
(setq viper-translate-all-ESC-keysequences t)                                                                        
(setq viper-fast-keyseq-timeout 0)
4

4 に答える 4

3

私は同じボートに乗っていましたが、この問題のために長い間emacsを試すことができませんでした。しかし、私はついに調査する時間があり、解決策/回避策があると思います。

viperのソースを調べた後、私が見つけたすべてのドキュメントに付随するものが関数であることに気付きましたviper-translate-all-ESC-keysequences。したがって、同じ名前の変数を設定しても何も起こりません。

これで、.emacsファイルの行の(defun viper-translate-all-ESC-keysequences () nil)後にあります。(require 'vimpulse)そして、ESCキーを今好きなだけスパムできるようです。なぜドキュメントが非常に誤解を招くのかはわかりませんが、今のところ、少なくともこの回避策でemacsを試すことができます。お役に立てれば!

于 2010-10-30T04:08:57.050 に答える
1

上記の答えは私にはうまくいきませんでした。viper のドキュメントを調べたところ、(viper-fast-keyseq-timeout) と (viper-ESC-keyseq-timeout) の 2 つのコマンドが見つかりました。前者は、定義された時間で区切られた任意のキーの組み合わせを Vi モードに解釈させて、Vi マクロにすることです。後者は、vi モードでの ESC の特別な意味を無視することです。後者を 0 に設定すると、問題が解決します。(iterm2、mac os X ライオン)

[参照]

viper-ESC-keyseq-timeout tty では 200、ウィンドウ表示では 0 この遅延 (ミリ秒単位) で区切られたエスケープ キー シーケンスは、コマンドとして解釈され、VI の ESC の特別な意味は無視されます。デフォルトは、ほとんどの端末に適しています。ただし、端末が非常に遅い場合は、これを少し増やした方がよい場合があります。矢印キーによって発行された ESC キー シーケンスが個別に入力された文字として解釈される場合 (したがって、矢印キーが機能しない場合)、端末が遅いかどうかがわかります。この値を大きくしすぎると速度が低下するため、制限してください。

viper-fast-keyseq-timeout 200 このミリ秒単位で区切られたキー シーケンスは、Vi スタイルのキーボード マクロとして扱われます。キー シーケンスがそのようなマクロとして定義されている場合、それが実行されます。それ以外の場合は、入力されたキーの通常のシーケンスとして処理されます。この変数を高く設定しすぎると、入力が遅くなる場合があります。設定が低すぎると、マクロをすばやく入力するのが難しくなる場合があります。

viper-translate-all-ESC-keysequencestty では t、ウィンドウ表示では nil 通常、Viper は Emacs に、低レベルのキー変換マップまたはファンクション キー マップで定義されている ESC キー シーケンスのみを変換させます。たとえば、矢印キーやファンクション キーによって出力されるものなどです。\e/ などの他のシーケンスは、ESC コマンドの後に / が続くものとして扱われます。これは、入力が速く、ESC を押した直後に他の文字を押す傾向がある人に適しています。ESC シーケンスを常に変換する Emacs が好きな人もいます。デフォルトでは、ダム端末を使用している場合にのみすべてのシーケンスを変換します。これにより、挿入モードで ESC をメタ キーとして使用できます。たとえば、ESC x をすばやく押すと、Mx と入力する効果があります。あなたのダム端末がそれほどダムではなく、メタキーを理解するなら、おそらくこの変数を nil に設定したほうがよいでしょう。どの方法が自分に合っているか試してみてください。

于 2011-08-28T16:13:33.900 に答える
1

この問題は、コンソール モード (つまり、実行中emacs -nw) で発生しました。

私に以下を追加するinit.elことが私にとっての解決策のようです:

(set 'viper-fast-keyseq-timeout 0)
(set 'viper-no-multiple-ESC t)
(defun viper-translate-all-ESC-keysequences () t)

私も追加する必要がありました:

maptimeout 0

.screenrcGNU Screenセッション内でemacsを実行するために私のファイルに追加しないと、問題が再発します。


また:

(defun viper-translate-all-ESC-keysequences () nil)

「機能する」ように見えましたが、M-スタイルコマンドを無効にするという意図しない効果があったため、(たとえば)挿入モードではM-/実行できませんでした。dabbrev-expand

于 2011-11-19T17:19:16.387 に答える
0

この(defun viper-translate-all-ESC-keysequences () nil)ソリューションは、iTerm2->sshからSlackware11->画面->emacs22.3.1で実行されているターミナルemacsでは機能しませんでした。

私がしなければならなかったのは:

(custom-set-variables
  '(viper-translate-all-ESC-keysequences t))

設定は「nil」ではなく「t」であることに注意してください。

しかし、私のOSX iTerm2-> emacs 23.2.1の解決策は、これが修正でした:

(setq viper-fast-keyseq-timeout 0)                                                    
于 2011-04-25T02:40:05.197 に答える