AltキーをVimにマッピングできますか?


90

以下の行を.vimrcに追加するようにマップしようとしましたが、機能しません。.vimrcがVimによってロードされていることを確認しました。

map <Alt-D> <C-D>

このマッピングにエラーはありますか?


ターミナルでvimを使用していますか、それともGUIバージョン(gvim、macvim)を使用していますか?
Nick Knowlson 2011

またencoding、マッピングの実行後に変更を加えた場合、Altキーから得られるものが最初に設定したものと一致しない可能性があることにも注意してください。
dash-tom-bang

回答:


136

Macユーザーの方へ:ALT + hjklをマッピングするには、代わりに生成された実際の文字を使用します(INSERTモードで組み合わせを使用してどの文字を見つけるか)。たとえば、キーボードで次のようになります。

<ALT+j> ==> ª
<ALT+k> ==> º

等々。StackOverflowで解決策が見つかりまし

これを使用して、ALT + k \ jで行を上下に移動し、.vimrcでこれを使用しました。

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

ここで説明されているよう

お役に立てば幸いです。Vimをお楽しみください:)

Dylan_Larkinによる補遺(2019):これをMacで機能させるには、[ターミナル]-> [設定]-> [キーボード]で[オプションをメタキーとして使用]をオフにする必要があります。


10
これは私がここに来た理由です(スプリットを移動するためのAlt + HJKL)!ありがとう!
Jamie Schembri 2013年

6
それがどの文字であるかを見つける簡単な方法は、を使用することcatです。単純に入力catしたいキーの組み合わせをして猫のウィンドウ内。私のMacでは、alt +角かっこが「」と「」であることがわかりました。
dvcrn 2014

4
これは、Alt + HJKLがスプリット間を移動するのに最適です、私の指はそれが大好きです!! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
ジョン

3
これらの正確なマッピングは、OSXの将来のバージョンでは期待どおりに機能しない可能性があります。sed -n lマッピングを構成する前に、<Ak>と<Aj>の出力を確認するために使用します。私の場合、<Aj>˚
はで

4
macOSでは、設定時Use Option as Meta KeyまたはiTermプロファイルで⌥ key to Esc+、従来の方法(Linux / Unixなど)として動作します。したがって、Vimにマップを設定する必要はありません。またはに<^[j>マップするだけで機能します。<A+j><M+j>
goetzc

40

:help key-notationさまざまなキーをマップするために使用する必要のある形式について説明します。altの場合は、<A-またはのいずれかを使用できます<M-。だからあなたのマッピングは

map <M-d> <C-d>

マッピングのために右側を再評価することを明示的に許可したい場合を除いて、(たとえば)のnoreバリアントを使用することもお勧めします。:mapnoremap


1
これはまだ効果がありません。Alt + D入力でも、Vimに奇妙な文字が入力されます。
トムソン

9
それは別の問題です。端末がマルチバイト文字をVimに送信していて、Vimはそれをとして解釈することを知りません<A-d><A-d>として送信されるように、端末の設定を変更する必要があります<Esc>d
jamessan 2011

1
@jamessan iterm2でそれを行う方法は?
フィン

33

もう「可能」かどうかはわかりません。以下のアップデートをお読みください。

はい、あなたも、端末vimの中ですることができますが、本当ありませんキャッチは、すべての答えが。基本的に2つのステップに従う必要があります。

  1. <M-d>表記が存在することを確認し、端末が入力したもの(^[エスケープ文字)を正確にマップします。

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. 新しく「作成した」組み合わせに何かをマップします。

    noremap <M-d> :echo "m-d works!"<cr>
    

それがどのように機能するかを理解すると、この「トリック」を他の「奇妙な」組み合わせに拡張できます。たとえば、私はシロアリを使用していますが、vimは<S-F1>猫を使用して認識しません^[[1;2P。次に、vimrcで次のことを行いますexecute "set <S-F1>=\e[1;2P"。それから、それを何にでもマップできます。

注:理由はわかりませんが、の\<Esc>代わりに作品を使用している人もい\eます。


更新(2016年2月)

端末が実行するterminfoによっては、次のことができるかもしれません...ほとんどの端末では、たとえば、「alt + h」は、^[h「escape + h」にマップされます。そのため、キーが上書きされる可能性があります。私は(もう一度)試したところ、うまくいくようですが、非常にバグが多く、エラーが発生しやすい実装だと思います。

それにもかかわらず、勇敢な人のために、ここに実験的なプラグインがあります:


ものの代わりに、execute "set...直接使用することができますset <M-d>=^[d^[実際に入力されたエスケープ文字ですC-v-Esc。これはrxvt / urxvtで必要でしたが、xtermは特別な処理を必要としないはずです。このトピックの詳細については、vimwikiをご覧ください。
ミカエリオット

つまり、Mdをバインドできるように、tmuxで機能する類似のアプローチはありますか?
ジョージ

2
私にとっては、<Esc>その後、d今と同じものでない<Alt>+をd。また、ここのようにCtrl-v<Esc>を使用して1行でこれを行うことができます
Sparhawk 2017年

24

Mac OSxのVimでAltキーをマップします:

端末がvimに送信しているキーコードを表示することから始めます。

$ sed -n l
^[[1;9D 

上記の例では、コマンドを実行してを押しましたAlt + Left

これ^[[1;9Dはvimに送信されるエスケープされたシーケンスであるため、マッピングに使用できます。

map <Esc>[1;9D 

3
iTerm2アプリを使用している場合は、[プロファイル]> [キー]でキーがどのようにマップされているかを確認することをお勧めします。
fikovnik 2017

1
左とOptionキー()として設定Esc+iTerm2で、私はマップできalt+qVimを終了するには: nnoremap <silent> <Esc>q :qa!<cr>
ryenus

[設定]> [プロファイル]に移動し、現在のプロファイルを選択し、そのプロファイルの[キー]タブに移動して、[左⌥キー]というオプションを[Esc +]に変更すると、そのリマップで動作するようにiTerm2を設定することもできます(利用可能)オプションは「Normal」、「Meta」、および「Esc +」です。
ジョヴァンニ・ベヌッシ

12

使用する:

map <A-D> <C-D>

を参照してください:help key-notation


1
これはまだ機能していないようです。Alt + dは、マップ解除の場合と同じように、Vimに奇妙な文字を入力します。
トムソン

私のために働く(私はgvimWindowsで使用しています)
2013

8

お使いの端末がAlt-Dを「適切に」送信しない可能性があります。CVを使用して、実際のエスケープシーケンスをVimに送信し、それを使用してマッピングを作成できます。つまり、.vimrcを編集し、次のシーケンス「CV Alt-D」を入力して実際のシーケンスを置き換えると、vimrcに正しいエスケープシーケンスが含まれるようになります。ターミナルがvimに何も送信しない場合、これは機能しません。


8

私のターミナルは^[xコマンドを生成します(例えば、alt-xの場合)。Vim内で機能するようになったのは、vim.wikia.comのこの小さなスクリプトでした

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

.vimrcに追加して、すべてのAltキーマッピングを修正します。


1

Macユーザーに対するBrunoの回答のフォローアップとして、オプションキーがにマップされていることを確認してくださいEsc+

これにより、AVimのオプション()キーの「通常の」動作が得られます。

たとえば、ではiterm2、このオプションは次の下にありPreferences > Profiles > Keysます。

iterm2設定のスクリーンショット


また、設定を以下に変更する必要がnnoremap <Esc>j :m .+1<CR>==ありました...
mihaipopescu

0

こんにちは、Macで上記のすべてを何年もテストした後、良い解決策がなかったので、私は検索を続けました。

これが私の解決策です:

Altを含む組み合わせキーストロークを作成するには、設定>キーボードで組み合わせを宣言し、vimセットアップファイルでその組み合わせを使用する必要があります(メタキーとして使用オプションをチェックしてください)。

a通常の文字を上書きしないように、出力は通常とは異なる文字(たとえば、no )である必要があります。

以下の例では、ALT-Upでかなりvimできるはずです。

vim設定: vim設定

Macの設定: Macの設定

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