VIM のコマンドラインで「カーソル下の単語」を指定するにはどうすればよいですか?
-
09-06-2019 - |
質問
VIMで「カーソル下の単語」を指定するコマンドを書きたいと思っています。たとえば、単語の上にカーソルがあり、それを 2 回表示するとします。たとえば、単語が「abc」で、「abcabc」が必要な場合は、次のように入力します。
:s/\(abc\)/\1\1/
ただし、カーソルを「def」に移動し、同じコマンドを使用して「defdef」に変更できるようにしたいと考えています。
:s/\(def\)/\1\1/
これを行うには、コマンドラインでコマンドをどのように記述すればよいでしょうか?
:s/\(*whatever is under the commandline*\)/\1\1
解決
<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>\)/
他のヒント
コマンドラインモードでは、 CTRL+R CTRL+W カーソルの下に単語が挿入されます。
ヘルプを参照してください c_CTRL-R
他のすべての特殊レジスターのリストについては、以下を参照してください。
:help c_CTRL-R
yiwP
yiw
:内部ワード (カーソル下のワード) をヤンクします。このコマンドは、カーソルを単語の先頭に移動します。
P
:カーソルの前に貼り付けます。
次に、次のようにマッピングできます。 < ALT > - D
このコマンドに対して:
:nmap < ALT >-D yiwP
これを行うもう 1 つの簡単な方法は、 *
指示。
通常モードでは、単語の上で次のように入力します。
*:s//\0\0<Enter>
*
検索パターンを現在の単語にします (例:\<abc\>)。
:s//
現在の検索パターンを使用して置換を実行し、 \0
交換セクションには、一致した文字列があります。
その後、同じ文字をもう一度入力するか、次のように入力することで、この動作を繰り返すことができます。
*@:
@:
<Enter> (この場合は置換) を必要とせずに、最後の ex コマンドを繰り返すだけです。
また、 q
指示
qd*:s//\0\0<Enter>q
次に、それを心ゆくまで繰り返して入力してください
@d
単語を2倍にしたいとき。これは前の解決策よりも 1 文字だけ少ないため、単語の 2 倍化の間に他の ex コマンドを実行する場合を除いて、これは価値がないかもしれません。 @:
マッピング内のバックスラッシュをエスケープする必要があります。マッピング内に置換文字列を含めることもできます。
:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr>
ywPx
あなたが説明したことを行います。
ywPxw
また、カーソルを次の単語に進めます。
@ユーザー11211 最も簡単な方法があります カーソルの下の単語を複製するには:
yiwP
内部単語をヤンク (カーソルを単語の先頭に移動)、貼り付け (カーソルの前)。
例えば。まっすぐ[t]まっすぐ ----> まっすぐに[d]まっすぐ
[]はカーソルです
詳しく説明すると…
おそらく、重複した単語の後にカーソルを置きたいと思うでしょう。
yiwPea
ストレート[t]フォワード ----> ストレートストレートフォワード[]
注記:
yiw
内部ワードをヤンクします (空白なし)
yaw
すべての単語 (末尾の空白を含む) をヤンクします。
yawPea
したがって、空白や位置カーソルを含む重複した単語になります。
まっすぐ[t]forward ----> まっすぐ まっすぐ[]
" count word (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>