Esiste un oggetto di testo per la riga corrente?


Risposte:


13

Ecco una "linea" di oggetti di testo grezzi:

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

E un oggetto di testo "buffer" grezzo:

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

---MODIFICARE---

Un "operatore" è un comando che non fa nulla per sé: d, y, etc.

La pressione di questi tasti ti mette in "modalità operatore in sospeso", dove Vim ti aspetta per dirgli su cosa vuoi che funzioni ... con un "movimento in attesa dell'operatore".

È possibile utilizzare :omapo :onoremapper definire movimenti personalizzati in attesa dell'operatore. La tecnica qui utilizzata si ispira a :help omap-info:

  1. si definisce una mappatura della modalità visiva che copre l'area desiderata,
  2. si utilizza tale mappatura in una mappatura in attesa dell'operatore.

Si noti che ho usato :onoremapperché il, ale i%non esistono già. Se stai facendo override di un movimento già esistente o un testo-oggetto - dice ip- è necessario utilizzare una mappatura ricorsiva: :omap.

:help :map-operator descrive un metodo leggermente più avanzato.

Vedere :help v_oper oin modalità visiva.


Freddo. Ti dispiacerebbe spiegarne alcune parti? Che cos'è o(modalità operatore in sospeso) in onoremap? Cosa fa oin modalità visiva? Immagino che sia "l'altro lato", perché sembra saltare dall'altro lato di una selezione ... Come posso trovarlo :h? Non riesco a trovarlo con :h x_oo :h o.
Lindhe,

Spiegazione aggiunta.
Romainl,

1

Vorrei suggerire una soluzione aggiuntiva, per utilizzare ^ invece di 0 (quindi la riga inizia all'inizio del primo carattere:

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

In questo modo se "cambiamo in linea" si rispetterà il livello di rientro.


C'è anche un plug-in che fornisce questa funzionalità dal vim master kana: github.com/kana/vim-textobj-line/blob/master/doc/…
Blasco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.