95

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

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

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

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

これを行うには、コマンドラインにコマンドを記述するにはどうすればよいですか?

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

8 に答える 8

145

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

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

:help c_CTRL-R
于 2009-03-10T03:35:49.590 に答える
77

<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>\)/
于 2008-09-07T18:24:56.447 に答える
30
yiwP

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

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

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

:nmap < ALT >-D yiwP
于 2008-09-17T11:19:59.440 に答える
15

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

通常モードでは、単語の上にある場合は、次のように入力します

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

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

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

次に、同じものをもう一度入力するか、次のように入力して、この動作を繰り返すことができます。

*@:

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

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

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

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

@d

単語を2倍にしたいとき。これは以前の解決策よりも 1 文字少ないだけなので、価値がないかもしれません。ただし、word-double の間に他の ex-command を実行する場合を除きます。@:

于 2008-09-17T11:25:19.413 に答える
1
ywPx

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

ywPxw

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

于 2008-09-17T07:03:16.983 に答える
1

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

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
于 2008-09-16T20:01:51.910 に答える
-1
" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
于 2009-05-15T14:42:05.697 に答える