Risposte:
Poiché vim utilizza il segno di percentuale per fare riferimento al buffer corrente, è possibile utilizzarlo per ottenere tutto rapidamente.
:%y
tirerà l'intero buffer
:%y+
lo tirerà nel +
registro (e presumibilmente negli appunti, a condizione che vim sia stato compilato con le opzioni appropriate).
:%d
e :%d+
farà lo stesso per la cancellazione.
In ciascuno di questi casi, il cursore rimane in posizione.
C-o
due volte per tornare indietro.
Un'altra soluzione è utilizzare un plugin chiamato vim-textobj-whole . Per impostazione predefinita, questo plugin fornisce l'oggetto di testo ae
per l'intero buffer, ie
per l'intero buffer tranne le righe vuote iniziali e finali.
Questo plugin dipende da vim-textobj-user dello stesso autore, che consente agli utenti di definire comodamente qualsiasi oggetto di testo. Ci sono molti plugin che fanno buon uso di questo.
Non esiste alcun oggetto di testo per l'intero file per impostazione predefinita, ma è possibile crearli utilizzando omap
. In questo caso, sarebbe simile a questo:
onoremap f :<c-u>normal! mzggVG<cr>`z
Ecco una ripartizione di come funziona:
onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker
Gli appunti:
Ctrlupuò essere utilizzato in modalità riga di comando per eliminare tutto a sinistra della posizione del cursore. Il motivo per cui ciò viene fatto è perché se si immette la riga di comando direttamente dalla modalità visiva, questa verrà automaticamente inserita '<,'>
nella riga di comando e non è quello che vogliamo. Vorrei anche suggerire di utilizzare qualcosa di diverso da f
, perché f
viene normalmente utilizzato per passare al successivo personaggio cercato sulla linea. Ad esempio, fi
passerà al successivo i
sulla riga corrente.
Argomenti della guida pertinenti:
:help omap-info
:help :normal
:help c_CTRL-U
:help v_:
``
a alla fine riporta il cursore nella posizione precedente.
Ecco alcune mappature veloci e sporche per eseguire l'attività:
nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>
Ora puoi usare yY
e dD
per tirare / cancellare rispettivamente. Non è bello come usare un oggetto di testo completo, ma a volte le soluzioni più semplici sono le migliori.
Per ulteriori informazioni, consultare:
:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
mmgg"+yG`m
e non ci ho mai pensato. Grazie, questo sta andando proprio nel .vimrc.