0

Vim のバグを見つけたばかりだと思いますが、Bram Moolenaar を悩ませる前に、Vim コマンド構文の理解が正しいかどうかをここで確認しておこうと思いました。

私の.vimrc中で、私は持っています

cnoreabbrev W w
cnoreabbrev Q q 

or を入力するときにシフトを押したままにする傾向があるため、 :wor:qを与え:Wます:Q。しかし、やなどで or を検索しようとすると、WVimQは代わりに or の出現箇所を見つけます。検索文字列ではなく、短縮されたコマンドのみを持っていると思っていたので、これは驚くべきことです。my から 2 行を削除すると、目的の動作が得られます。/W?Qwq.vimrc

これは のバグですか、それとも の機能cnoreabbrevですか? これは、Debian パッケージの Vim 7.3.923 と現在の Mercurial ヒントの両方で発生します。

4

3 に答える 3

2

コマンド ラインの省略形は、ユーザーが意図しない微妙なバグを引き起こすことで有名です。作成しようとしているエイリアスのタイプは、おそらくコマンドに変換する必要があります。

command W w
command Q q

補完、bang 引数、および範囲引数は、読者の演習として残しておきます。

ただし、本当に使いたい場合はcnoreabbrev慎重に行う必要があります。私は通常getcmdtype()、コマンドラインの値をチェックしてチェックする式の省略形を作成しますgetcmdline(). 以下の例

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

自分でロジックを作成したくない場合は、Hari Krishna Dara call cmdaliasによるプラグインを使用できます。

詳細については、次を参照してください。

:h Command-line-mode
:h :command
:h :map-expression
:h getcmdtype()
:h getcmdline()
于 2013-08-29T16:28:31.280 に答える
2

私はそれがバグだとは言いません、それは ..... 機能です。:D

abあなたがしたことは、コマンドラインモードでのみ作成することです。

/(検索) コマンドラインモードにもなります。abそれがそこでも働いた理由です。

:h vim-modes

あなたが見ることができます:

Command-line mode   In Command-line mode (also called Cmdline mode) you
Cmdline mode        can enter one line of text at the bottom of the
            window.  This is for the Ex commands, ":", the pattern
            search commands, "?" and "/", and the filter command,
            "!". 

それで

これは、Ex コマンド「:」、パターン検索コマンド「?」用です。と "/"、およびフィルター コマンド "!" です。

于 2013-08-29T15:19:02.197 に答える
1

特徴。

表示された後にスペースを?Q押すと、に変更されます?q

それを修正する私の方法は、実際にはユーザーコマンドを定義することです。(とにかく大文字で始まるので動作します)

command! Q q
command! W w 
于 2013-08-29T15:20:11.677 に答える