現在の行にテキストオブジェクトはありますか?


回答:


13

これが粗雑な「行」テキストオブジェクトです:

xnoremap il g_o0
onoremap il :normal vil<CR>
xnoremap al $o0
onoremap al :normal val<CR>

そして粗雑な「バッファ」テキストオブジェクト:

xnoremap i% GoggV
onoremap i% :normal vi%<CR>

---編集---

:「演算子は、」自身で何もしないコマンドであるdyなど

これらのキーを押すと、「オペレーター保留モード」になり、Vimは、操作する対象を「オペレーター保留モーション」で指示するのを待ちます。

:omapまたは:onoremapを使用して、カスタムのオペレーター保留モーションを定義できます。ここで使用されているテクニックは、以下に触発されてい:help omap-infoます。

  1. 目的の領域をカバーするビジュアルモードマッピングを定義し、
  2. そのマッピングは、オペレーター保留のマッピングで使用します。

私が使用することを注意:onoremapするのでilalそしてi%まだ存在しません。既存のモーションまたはテキストオブジェクトを上書きする場合は、たとえばip、再帰的なマッピングを使用する必要があります:omap

:help :map-operator もう少し高度な方法について説明します。

ビジュアルモードのを参照:help v_ooてください。


涼しい。少し説明していただけませんか?何がoonoremapに(オペレータ保留モード)?oビジュアルモードでは何をしますか?セレクションの反対側にジャンプするように見えるので、それは「反対側」だと思います...どうやっ:hてそれを見つけるのですか?:h x_oまたはで見つけることができません:h o
lindhe

説明を追加しました。
romainl 2016年

1

追加の解決策として、0ではなく^を使用することをお勧めします(したがって、行は最初の文字の先頭から始まります:

xnoremap il g_o^
onoremap il :normal vil<CR>
xnoremap al $o^
onoremap al :normal val<CR>

このように「行を変更」すると、インデントレベルが尊重されます。


vimのマスターカナでこの機能を提供するプラグインもあります:github.com/kana/vim-textobj-line/blob/master/doc/...
ブラスコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.