10

またはの間にテキストをキャプチャするためのモーションはあります/\? 他のシンボルのモーションがあることは知っています ---

ci"- 内部の「テキスト」をキャプチャ"text"

vi(int var-内部のビジュアル キャプチャfoo(int var)

di[- 単語[word]を削除[]

私が見つけることができる唯一の回避策は、Vim Surroundを使用し、それを使用して周囲\"( cs\") に変更し、そこから作業することです。ただし、そのような面倒なだけでなく、プラグインはバックスラッシュのみをサポートし、フォワードはサポートしていません.

4

4 に答える 4

8

このための独自のテキスト オブジェクトを非常に簡単に作成できます。

onoremap <silent> i/ :<C-U>normal! T/vt/<CR> " inside /
onoremap <silent> a/ :<C-U>normal! F/vf/<CR> " around /

ビジュアルモードで動作するには:

xnoremap <silent> i/ :<C-U>normal! T/vt/<CR> " inside /
xnoremap <silent> a/ :<C-U>normal! F/vf/<CR> " around /

同様に、次のこともできます\

編集:情報コメントを追加しました。

于 2014-05-15T02:39:14.773 に答える
3

マッピングでそれを行う 1 つの方法を次に示します。

  nnoremap H mal??e+1<Enter>mb//<Enter>y`b`a

このマッピングは、最後の検索パターンの 2 つの出現の間のすべてをヤンクします。

.vimrcファイルに配置して、永続的にします。

質問の使用法:

  • スラッシュを検索: /\/ (バックスラッシュのエスケープ文字に注意してください)
  • 2 つのスラッシュの間(または 2 番目のスラッシュ) にカーソルを配置します
  • 押すH

最後/と次の間のすべて/がヤンクされます。

説明:

  nnoremap H mal??e+1<Enter>mb//<Enter>y`b`a

 - nnoremap H      map H in normal mode, ignoring other mappings    
 - ma              place a mark (named a) at the current cursor location
 - l               move the cursor one char to the right
 - ??e+1<Enter>    move to 1 character after END of prev occurrence of last search pattern
 - mb              place a mark (named b) at the current cursor location
 - //<Enter>       go to the beginning of the next occurrence of the last search pattern
 - y`b             yank to the location of the mark named x (note: ` = "back tick")
 - `a              go to the mark named `a`

入力例:

This is a *funky* string
  • 検索する*
  • カーソルを 2 つのアスタリスクの間(または 2 番目のアスタリスクの上) に配置します。
  • 押すH

funkyという単語がヤンク バッファに格納されます。

単語を区切り文字として使用できます。

入力例:

<br>
Capture all this text.
<br>
  • 検索する<br>
  • H通常モードで<br>s の間(または 2 番目)に押す<br>

正規表現も使用できます。

入力例:

<p>
Capture this paragraph.
</p>
  • を検索します<.\?p>(または <\/\{,1}p> 、より正確には)
  • 段落内(または終了タグ)で、通常モードで H を押します。<p>

...

より良いアプローチは、レジスターを使用して区切り文字を記憶することです。これにより、このマッピングを素早くおよび/または繰り返し使用できます。つまり、/or\または<\?p>をレジスターに保存し、それを使用して、保存された区切り文字の間のテキストをすばやくキャプチャすることができます。

于 2014-05-15T03:55:15.853 に答える