1. ホーム
  2. vim

[解決済み] Vimでコマンドのエイリアスを作成する方法は?

2022-05-05 20:17:55

質問

Vimは私がプログラミングをするときに好んで使うテキストエディタですが、そのため、いつも特に厄介な問題に遭遇しています。

頻繁に、バッファを保存して他の雑多なタスクに進む必要があるとき、私は典型的な方法をとります。

:w

しかし、私はいつも(50%以上の確率で)、そのことを利用することができます。  :w . 当然ながら、Vim は私に怒鳴ります。 W は無効なコマンドです。

E492: Not an editor command: W

私の質問は、どのようにすれば Vim のコロンコマンドのエイリアス . 特に、以下のようなエイリアスを作成する方法を教えてください。 Ww .

というプロセスを意識しています。 マップキー を特定の コマンド しかし、それは私が求めているものではありません。

解決方法は?

補完をそのままにするには

cnoreabbrev W w

を置き換えます。  W をコマンドラインから  w ただし、その後に単語文字が続いたり先行したりしない場合のみです。 :W<CR> に置き換わります。 :w<CR> しかし :Write にはなりません。(これは、予想外のものも含めて、一致するすべてのコマンドに影響することに注意してください。例えば、コマンド :saveas W Z は次のように置き換えられます。 :saveas w Z ということで、注意してください)。

更新情報

私ならこう書きます。 :

cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))

機能として

fun! SetupCommandAlias(from, to)
  exec 'cnoreabbrev <expr> '.a:from
        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")

これは、コマンドの種類が  : で、コマンドは  W よりも安全です。 cnoreabbrev W w .