2009-11-05 25 views
12

Come posso invertire una parola in Vim? Preferibilmente con una regex o comandi normali modalità, ma altri metodi sono i benvenuti:Invertire una parola in Vim

parola => drow

Grazie per il vostro aiuto! PS: Sono in Windows XP

Python è integrato nel mio vim, ma non in Perl.

+0

Vedo questa funzione molto spesso. Esattamente: perché ne hai bisogno? ;) – wishi

+2

Ciao @wishi_! La mia ragazza può invertire le parole molto velocemente in mente e voglio verificarlo :-) – Jogusa

risposta

2

se la versione di VIM lo supporta si può fare vw\is o viw\is (mettere il cursore sulla prima lettera della parola prima di digitare il comando) ... ma ho avuto un sacco di problemi di compatibilità con quello. Non sono sicuro di cosa debba essere compilato o attivato, ma funziona solo a volte.

EDIT:

\is è:

:<C-U>let [email protected]<CR> 
\ :let [email protected]"<CR> 
\ gv"ay :let @a=substitute(@a, '.\(.*\)\@=', '\[email protected][strlen(submatch(1))]', 'g')<CR> 
\ gvc<C-R>a<Esc> :let @a=old_reg_a<CR> 
\ :let @"=old_reg<CR> 

non si ricordava da dove è venuto, ma una ricerca su Google venuto questo articolo su vim.wikia.com. Che mostra la stessa cosa quindi immagino sia così.

+0

Hmm, non sembra funzionare per me, se si digita "map", a cosa si è mappati? – Benj

4

si Supponendo che hai il supporto perl incorporato in vim, si può fare questo:

command! ReverseWord call ReverseWord() 
function! ReverseWord() 
perl << EOF 
    $curword = VIM::Eval('expand("<cword>")'); 
    $reversed = reverse($curword); 
    VIM::Msg("$curword => $reversed"); 
    VIM::DoCommand("norm lbcw$reversed"); 
EOF 
endfun 

E potenzialmente legarsi che ad una combinazione di tasti in questo modo:

nmap ,r :ReverseWord<CR> 
+0

Hmm, ho appena capito che non funziona se sei sulla prima lettera della parola, devi essere ancora una lettera due. – Benj

+0

Ok, l'ho risolto e ho modificato la mia risposta, in pratica avevo bisogno della norma lbcw non solo bcw – Benj

+0

Non sembra funzionare per me, forse perl non è supportato. Ma python è supportato! Grazie per i tuoi sforzi. – Jogusa

1

Se avete un po 'di tempo sulle mani, è possibile bolla vostro modo da personaggi in modo iterativo di recepimento (xp) ...

3

Non ho Python supportato sul mio VIM, ma sembra che sarebbe piuttosto semplice farlo con Python. This article sembra una buona spiegazione di come utilizzare Python in VIM e sto cercando di indovinare che avresti fatto qualcosa di simile:

:python 'word'[::-1] 

L'articolo indica che il risultato apparirà nella barra di stato, che sarebbe non -optimale se stavi cercando di sostituire la stringa in un documento, ma se vuoi solo controllare che la tua ragazza stia invertendo correttamente le stringhe nella sua testa, questo dovrebbe andare bene.

6

Ecco un'altra soluzione (divinatorio) sulla base di come funziona:

:echo join(reverse(split('hello', '.\zs')), '') 
olleh 

Se si desidera sostituire tutte le parole nel buffer,

:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g 

Questo funziona in primo luogo la creazione di un elenco di caratteri nella parola, che è invertito e riunito per formare la parola. Il comando sostitutivo trova ogni parola, quindi passa la parola alle espressioni e utilizza il risultato come sostituzione.

1

Bene, è possibile utilizzare Python stesso per invertire la linea attraverso il comando filtro.Dì che il testo che hai scritto è stato:

Python 

È possibile invertire emettere.

:1 ! python -c "print raw_input()[::-1]" 

E il testo sarà sostituito a diventare:

nohtyP 

Il "1" nel comando dice a vi di inviare la linea 1 alla dichiarazione python che stiamo eseguendo: "raw_input print() [:: - 1]". Quindi, se volessi che un'altra riga fosse invertita, invierai quel numero di linea come argomento. L'istruzione python inverte quindi la riga di input.

0

Se si dispone di rev installato (ad esempio tramite MSys o Cygwin), in realtà non è così difficile.

Selezionare ciò che si vuole invertire e filtrare (%! <cmd>) è:

:%! rev 

Questa tubi la selezione per la shell mentre passa un comando.

Problemi correlati