Existe um objeto de texto para a linha atual?


Respostas:


13

Aqui está um objeto de texto "linha" bruto:

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

E um objeto de texto bruto "buffer":

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

---EDITAR---

"Operador" é um comando que não faz nada por si só: d, y, etc.

Pressionar essas teclas coloca você no "modo de operador pendente", onde o Vim espera que você diga o que deseja que ele opere ... com um "movimento de operador pendente".

Você pode usar :omapou :onoremappara definir movimentos personalizados pendentes do operador. A técnica usada aqui é inspirada em :help omap-info:

  1. você define um mapeamento de modo visual que cobre a área desejada,
  2. você usa esse mapeamento em um mapeamento pendente de operador.

Note que eu usei :onoremapporque il, ale i%ainda não existe. Se você está substituindo um movimento existente ou texto-objeto - digamos ip- você deve usar um mapeamento recursiva: :omap.

:help :map-operator descreve um método um pouco mais avançado.

Veja :help v_opara ono modo visual.


Legal. Você se importaria de explicar alguns pedaços? O que é o(modo pendente do operador) no onoremap? O que faz ono modo visual? Eu acho que é o "outro lado", porque parece pular para o outro lado de uma seleção ... Como encontro :hisso? Não consigo encontrá-lo com :h x_oou :h o.
Lindhe

Explicação adicionada.
Romainl

1

Eu sugeriria uma solução adicional, para usar ^ em vez de 0 (para que a linha comece no início do primeiro caractere:

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

Dessa forma, se "mudarmos de linha", ele respeitará o nível de indentação.


Há também um plugin que fornece essa funcionalidade pelo vim master kana: github.com/kana/vim-textobj-line/blob/master/doc/…
Blasco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.