検索と置換の検索用語を再利用するショートカットはありますか?


8

この質問はすでに出されている可能性はあると思いますが、それは見つかりません。

私がそのようなことをやっていて:s/foo/bar/g、それを次の行でもう一度呼び出したいのですが、のbaz代わりにbarそれを行うより速い方法はありますか?&bazうまくいくと思いますが、うまくいきません。

回答:


11

あなたが求めるものとは正確には違いますが、あなたはそれを行うことができます:

:s/foo/bar/g

その後:

:s//baz/g

:s検索したパターンを使用すると検索レジスタに保存されるので、それを利用できます。あなたはそれで見ることができます:reg /


進行中の作業:次の方法でワークフローをスピードアップできます。

nnoremap && :s<UP><C-F>F/cT/

そしてそれを次のように使用します:

:s/foo/bar/g

その後

&&baz<CR>

分解:

nnoremap &&         " define a new mapping
:s<UP>              " get the last :s command in the history
<C-F>               " use this command in the cmdline window
F/                  " go back to the last /
cT/                 " change back up to the last /

いくつかのメモ:

  • フラグがない場合、これは機能しません
  • 代替文字列がない場合、これは機能しません
  • それ以外の場合動作するはずです

(私がそれを改善できるかどうか私に知らせてください)。

いくつかの読書:

  • :h cmdline-window
  • :h c_CTRL-F

2
それは私が以前やっていたことより間違いなく優れています。私は残念ながらより高速な方法は存在しない可能性があること、それを取るよ。:(
イーライSadoff

AFAIKではなく、私はあなたが望むことをするマッピングを作成しようとしていますが、箱から出して、あなたは置換式をもう一度入力することに制限されていると確信しています
nobe4

5

@ nobe4の回答に加えて、Damian Conwayには、検索と置換アクションを高速化する2つの非常に興味深いマッピングがあります。彼らはこれからが完全に読む価値のあるインタビューの方法を教えてくれます。

彼を引用するには:

[...]私は永遠にグローバルな検索と置換(つまり :%s/X/Y/g<CR>)をしていることがわかったので、決して使用されなかった(自分が)Sコマンドを盗むことで、繰り返し入力を排除しました。

nmap  S  :%s//g<LEFT><LEFT>

次のように入力するだけです:SX / Y

しかし、その後、パターンの/検索をどのくらいの頻度で行ったかに気付き始め、一致を調べた後、それらすべてをグローバルに置き換えたいと考えました。より厄介な繰り返しであったSマッピングを使用した場合でも、最初に検索を実行します。/pattern次に置換を実行します。Spattern/ replacementしたがって、(これも私が使用することはない)Mコマンドを盗みました。

nmap <expr>  M  ':%s/' . @/ . '//g<LEFT><LEFT>'

今はそれだけです:検索を実行します:/ pattern次にすべての一致を置き換えます:Mreplacement


あなたの質問に答えるために、私はあなたがこのようなもののために最初のマッピングを少し修正することができると思います:

nmap  S  :s///g<LEFT><LEFT>

このようにして、最初に置換:s/foo/bar/gを行い、次の行に移動してヒットするSと、カーソル:s//|/gがどこに|あるのか、新しい置換を入力できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.