VIMのコマンドラインで「カーソルの下の単語」を指定するにはどうすればよいですか?


86

VIMで「カーソル下の単語」を指定するコマンドを書きたい。たとえば、ある単語にカーソルを置き、それを2回表示するとします。たとえば、単語が「abc」で、「abcabc」が必要な場合は、次のように入力できます。

:s/\(abc\)/\1\1/

しかし、カーソルを「def」に移動し、同じコマンドを使用して「defdef」に変更できるようにしたいと思います。

:s/\(def\)/\1\1/

これを行うために、コマンドラインでコマンドを作成するにはどうすればよいですか?

:s/\(*whatever is under the commandline*\)/\1\1

回答:


74

<cword>カーソルの下の単語です(:help <cword>)。

申し訳ありませんが、私はこの答えをもっと完全にすべきでした。

コマンドをnmapするか、怠惰な人のためのこの一連のキーストロークが機能します。

b #go to beginning of current word
yw #yank to register

次に、パターンを入力するときにヒット<control-r>0<enter>すると、0番目のレジスタの内容がコマンドに貼り付けられます。

次のようなコマンドを作成することもできます。

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/

これは、コマンドラインを次のように置き換えるために、「\」と「w」を同時に押すことをマップします

:s/\(<currentword>\)/

17
私は素晴らしい答えに感謝します、しかし私はおそらく筋肉の記憶のためだけにyiwオーバーを提案するでしょうbyw。カーソルがすでに単語の最初の文字にあるシナリオでは、を省略して単純に入力する必要あります、inを省略してかまいません。事故が発生する可能性があり、間違いを修正することは確かにより多くのキーをbywiyiw
押すことです

132

コマンドラインモードでは、 CTRL + R CTRL+Wカーソル下の単語を挿入します。

c_CTRL-R他のすべての特殊レジスタのリストについては、のヘルプを参照してください。

:help c_CTRL-R

29
yiwP

yiw:ヤンクの内側の単語(カーソルの下の単語)。このコマンドは、カーソルを単語の先頭にも移動します。

P:カーソルの前に貼り付けます。

次に、eg:< ALT > - Dを次のコマンドにマップできます。

:nmap < ALT >-D yiwP

4
質問は、コマンドモードからではなく、Vimのコマンドラインから「カーソルの下の単語」を指定することに関するものでした
Nathan Fellman 2014

12

これを行うもう1つの簡単な方法は、*コマンドを使用することです。

通常モードでは、単語の上にあるときに、

*:s//\0\0<Enter>

* 検索パターンを現在の単語にします(例:\ <abc \>)。

:s// 現在の検索パターンを使用して置換を行い、 \0、置換セクションには一致した文字列があります。

次に、同じものをもう一度入力するか、「def」という単語を入力することで、この動作を繰り返すことができます。

*@:

@: <Enter>(この場合は置換)を必要とせずに、最後のexコマンドを繰り返すだけです。

qコマンドを使用してこれを行うためのクイックマクロを記録することもできます

qd*:s//\0\0<Enter>q

次に、入力して心ゆくまで繰り返します

@d

単語を超えたときに2倍にします。これは前の解決策より1文字少ないだけなので、それはあなたにとって価値がないかもしれません-単語の二重化の間に他の元コマンドを実行しない限り、@:


1

マッピング内の円記号をエスケープする必要があります。マッピング内に置換文字列を含めることもできます。

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>

1
ywPx

あなたが説明することをします。

ywPxw

また、カーソルを次の単語に進めます。


質問は、コマンドモードからではなく、Vimのコマンドラインから「カーソルの下の単語」を指定することに関するものでした
Nathan Fellman 2014

コマンドのすべての文字で、そのような答えを説明してください。
VitalyZdanevich19年

0

@ user11211に は、カーソルの下の単語を複製する最も簡単な方法があります。

yiwP

内側の単語をヤンク(カーソルを単語の先頭に移動)、貼り付け(カーソルの前)。

例えば。straigh [t] forward ----> Straightforwar [d] Straightforward

[]はカーソルです

詳述するために...

重複した単語の後にカーソルを置きたいと思うかもしれません。

yiwPea

straigh [t] forward ----> Straightforwardstraightforward []

注意:

yiw

ヤンキーの内側の単語です(空白なし)

yaw

すべての単語をヤンクします(末尾の空白を含む)。

yawPea

したがって、空白を含む重複する単語であり、カーソルを配置します。

straigh [t] forward ---->簡単な簡単な[]


問題は、コマンドモードからではなく、Vimのコマンドラインから「カーソルの下の単語」を指定することに関するものでした。
ネイサンフェルマン2014

1
上記の通常の(コマンドモード)コマンドは、コマンドモード内で:normal ...を前に付けるだけで使用できます。たとえば、:normal yiwPは、通常モードのyiwPと同じように動作します。もちろん、これはあなたが求めていたことを行うためのより遅い方法です。
BBW Before Windows

-1
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>

これが何をするのかコメントできますか?
ネイサンフェルマン

1
これは、コマンドのnフラグを使用して:substitute、カーソルの下の単語が現在のバッファーに表示される回数を出力します。かなり賢いですが、実際にはこの質問に対する答えではありません。
ジェイコブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.