Altキーをマップする方法は?


37

私はAlt次の方法でキーをマップしようとしています:

:map <A-j> j
:map <A-k> k

しかし、それは機能しません(ベルがAlt + j/ で鳴りAlt + kます)。

私は何が欠けていますか?

OSXでターミナルを使用していますが、リモートLinuxでも同じことが起こります。


Ctrl + vAlt + j私は持っている:?~H~Fときencoding=utf-8)。

Ctrl + vAlt + k私は持っている:?~Z˚ときencoding=utf-8)。

プラグインなしでvimを実行(-u NONE)しても違いはありません。


1
DOES Alt(プレス、ないホールド)してからj仕事?xterm少なくとも私は設定する必要があるmetaSendsEscapeためにtrue ...あなたは同じ問題を抱えている場合は仕事にこれらの配列を取得するには...私にはわからない、と私はテストすることはできませんので、私はOSXを使用していない
マーティンTournoij

@Carpetsmoker押すAlt、離す、jまたはその他のキーは通常どおり機能します。「メタキーとしてオプションを使用する」オプションを確認し、有効にしました。現在は機能しています。それで、設定metaSendsEscapeはトリックを行いました、ありがとう。
ケノーブ

3
この質問は以前に回答されました(より良い応答で)ここに:stackoverflow.com/questions/6778961/…–
user3751385

回答:


35

それは私がLinuxまたはCygwinでそれを行う方法です:

最初に、ALT+ を押したときに端末から送信される文字を確認しますJ

これを行うには、コンソールに移動して実行しますsed -n l(使用することもできますcat)。次にALT+ を押しJて、画面上の文字がであることを確認します^[j

(を押すと端末から送信されるため)に置き換え^[られ、最終的な文字列はになります。\eesc\ej

それから私はそれを私のに書き込みます.vimrc

execute "set <M-j>=\ej"
nnoremap <M-j> j

そして、マッピングは機能します。


4
その:set <M-j>=\ej部品のドキュメントが見つかりません。何を検索すべきですか?
エフゲニーセルゲイエフ

1
答えてくれて、これは私のために働いていた唯一の解決策でしたw / Iterm + vim
newUserNameHere

いや、これは機能しません。時々ESC-JはALT-Jとして機能します
-user3751385

1
@EvgeniSergeev See:help :set-termcap
リッチー

9

Carpetsmokerの助けを借りて、ターミナルは「Alt / optionをメタキーとして使用する」ように設定されていなかったようです(これは特にGUIターミナルで一般的です)。

OSX上のターミナルの場合、[設定]-> [設定]-> [キーボード]タブ-> [メタキーとしてオプションを使用]にあります。チェック:メタキーとしてオプションを使用するようにターミナルを変更するにはどうすればよいですか?マーベリックス)。

XTermについては、XTermをデフォルトのMeta Sends Escapeに設定してください:

個人の.Xdefaultsファイル(~/.Xdefaults)のどこかに次の行を追加します。

xterm*metaSendsEscape: true

次に、xrdbを使用して構成をリロードします。このステップがなければ、変更.Xdefaultsは次のXが再起動するまで有効になりません。

xrdb -l ~/.Xdefaults

次に、次のAltようなキーを持つ標準マッピング:

:map <A-j> j
:map <A-k> k

正常に動作します。

ヘルプについては、次を参照してください:h :map-alt-keys


4
:h :map-alt-keys別の情報源としても見たい場合があります
ピーターリンカー

4

Kossakの答えに似ていますが、リテラルキーを押してマッピングすることにより、少し単純になります。

プレス後のノーマルモードのいずれか:、またはあなたに挿入し.vimrc、マッピングを開始することで、直接入力をマップ:

nnoremap 

次にCtrl+ Vを押してから、記録するキーストロークを押します(例:Alt+)。これは次のように表示されます。

nnoremap ^[[1;3D

しかし、それぞれ^[が単一のリテラルエスケープ文字であり、構文の強調表示がこれを示すはずです。リテラルエスケープをテキスト<Esc>に置き換え、使用するコマンドを追加します。

nnoremap <Esc>[1;3D <C-w>h

私はOPがAlt+文字をマッピングしていたことを知っていますが、デフォルトではマッピングされないかもしれないものに対してそれをどのように行うかを示すために矢印を使用しました。


魅力のように働きました、どうもありがとう!
アリンディン

2

これは、Ubuntu 16.04 xfceターミナル(およびalacritty rustターミナル)で動作します

ultisnipスニペットトリガーをMeta-/(emacsスニペットのように)設定します

let g:UltiSnipsExpandTrigger="^[/"

ここ^[/にvim と入力します

挿入モード Ctrl-V Alt-/

MetaであるAlt私のPCのキーボード上のキー)


1

ショーがControl+V続く場合(ターミナルで入力)、vim.wikia.comからのこの小さなスクリプトで修正できます。ALT-x^[x

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

すべてのaltキーマッピングの.vimrcに追加します。

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