2013-03-06 13 views
9

Sto cercando di capire come dt o df l'ultima occorrenza di un carattere in una stringa.Vim - Elimina fino all'ultima occorrenza di carattere nella riga

Per esempio, diciamo che ho la seguente linea:

foo not.relevant.text.bar

Se io ho f df. expectedly ottengo foo relevant.text.bar ma vorrei ottenere foo bar. L'utilizzo di f 3df. non è un'opzione in quanto non so quanti di quei caratteri saranno presenti nella stringa. Inoltre, potrei voler ottenere foo .bar (f 3dt.), o se la linea termina con un punto, potrei voler ottenere foo .. Voglio trovare sempre l'ultimo indipendentemente da quanti ce ne siano.

È possibile senza regex? Suppongo che potrei usare una regex ma speravo ci fosse un semplice comando vim che mi manca. Mi trovo a provare a fare qualcosa di simile spesso.

+1

si desidera sempre eliminare dall'accensione della linea? in tal caso, solo alla fine della riga, una ricerca all'indietro '$ F.d0' –

+0

Se cerco all'indietro, dovrei trovare la prima occorrenza del carattere nella stringa poiché voglio ancora tutto prima del primo spazio. – Rob

risposta

8

È possibile utilizzare il mio JumpToLastOccurrence plugin. Fornisce comandi ,f/,F/,t/,T che fanno proprio questo.

+1

Funziona perfettamente. Questo e 'esattamente quello che stavo cercando. Grazie. – Rob

+0

Ecco il mirror github per gli utenti di VimPlug: https://github.com/vim-scripts/JumpToLastOccurrence e https://github.com/vim-scripts/ingo-library e https://github.com/tpope/vim -reprega (dipendenze) –

4

vorrei utilizzare f df...

Non è necessariamente più breve per scrivere, ma trovo più facile da usare "ultimo comando di ripetizione" che contare in anticipo il numero di parola/frase voglio cancellare.

Quindi è possibile regolare il numero di . digitato per regolare la lunghezza della stringa che si desidera eliminare.

+0

Questo è praticamente ciò che ho sempre fatto e va bene la maggior parte del tempo tranne quando voglio usarlo in una macro. – Rob

12

un modo senza utilizzare regex, senzacontare "dot" (potrebbe essere altre lettere) ... vedere se altri hanno modo migliore ..

foo[I]not.relevant.text.bar ([I] is cursor)

si potrebbe provare:

lmm$T.d`m 

o in questo formato, potrebbe sembrare migliore?

lmm$T.d`m

questo farà il lavoro. potresti creare una mappatura se la usi spesso.

EDIT

aggiungo un'animazione GIF per vederlo funziona.:)

nota

ho digitato @= in modalità normale dopo aver spostato il mio cursore al punto giusto di partenza (da f(space)), per visualizzare le chiavi ho premuto nella riga di comando.

enter image description here

+0

hai provato? L'ho provato, ma mi porta all'approvazione della linea. –

+0

dov'era il cursore quando inizi a digitare 'mm'? ti riporterà lì. Ho appena provato, ha funzionato bene. – Kent

+0

+1 perché è molto intelligente. Tuttavia, non funziona se la riga termina con '.' – Rob

0

In modalità visiva:

$F.d^ 

Il $ va fino alla fine della riga corrente, F ricerche a ritroso per un periodo e d^cancella fino all'inizio della riga.

+0

Oh scusa, questo non tralascia il testo prima della posizione del cursore quando si avvia. –

+0

Se ti farà sentire meglio: mi ha aiutato a trovare il modo di "saltare all'ultima occorrenza" :): "$ F" –

Problemi correlati