0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Vim/Nvimで複数のモードのマッピングを一度に行うコマンド

Last updated at Posted at 2022-12-23

CtrlもAltもFnも嫌いな私は近頃Vim/Nvimにハマっています。

手があまり大きくないのでコンパクトなiPad用キーボードを利用しているのですが、このキーボードは ESCがない 上に Fnとoを同時押ししないと : が入力できない などのVimを使うにはかなりやりにくいキー配置となっており、対策として私はいくつかの通常使わないキー(矢印キーなど)を ほぼ完全に別のキーにマップ しています。

このような状況ではvimrcもしくはinit.vimにマップコマンドが縦にズラーっと並ぶことになって見晴らしがよくありません。そろそろVim scriptにも慣れてきたので、ずっと気になっていたこの 「複数のモードで同じようなマッピングをするのに別々のコマンドが必要で面倒くさい!」 という問題に取り組んでみようと思います。

結論から言うと

vimrc内に次のようなコマンドを作りました。

vimrc
function s:noremaps(modes,lhs,rhs)
	for m in split(a:modes, '\zs')
		execute m.'noremap '.a:lhs.' '.a:rhs
	endfor
endfunction
command -nargs=+ Noremaps call s:noremaps(<f-args>)

第一引数にマップコマンドの接頭辞(nvxsoilct)をつなげた文字列を渡すこと以外は、だいたい通常のnoremapと同じように動作すると思います。

使用例

" 全てのモードで→キーを:キーとして扱う
Noremaps nxsoict <Right> :

マッピングでExコマンドを呼び出す場合、neovimでは<Cmd>~<CR>を使うことでほぼ全てのモードに対応したマッピングを行うことができます。
一方vimには<Cmd>がないためそれぞれのモードに対応したマッピングを行う必要があり、今回作成したコマンドは役に立ちません。
コメントによるとv8.2.1978から追加されていたそうです(少し古いビルドを使っていたため気づきませんでした…)。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?