2010-06-27 2 views
17

Per molto tempo ho saputo che posso usare ~ in Vim per commutare il caso di un personaggio. Ma c'è un modo per mappare una chiave per capitalizzare una parola e tornare alla posizione precedente?Come faccio a scrivere in maiuscolo la prima lettera di una parola in Vim?

Ad esempio:

I like to drink Coca co[l] 

Se il mio cursore si trova su "l" e mi rendo conto che ho bisogno di fare il "c" capitalizzare così, attualmente, ho bisogno di fare:

<C-c> b ~ ll i 

C'è un modo per mappare un singolo tasto per rendere maiuscola la prima lettera della parola sotto il cursore e mantenere il cursore nella posizione originale?

+1

Date un'occhiata [qui] (http://vim.wikia.com/wiki/Capitalize_words_and_regions_easily) . –

+0

Anche questa è una buona guida. Grazie per la condivisione. – Patrick

+0

_THIS_ è come vim dovrebbe essere usato! – kenny

risposta

15
:nmap <whatever> m`b~`` 
+0

Wow, grazie per la rapida risposta.Questo è esattamente quello che sto cercando! – Patrick

+1

è meglio renderlo m'lb ~ '' in modo da poter avere lo stesso effetto anche se si è già sul primo carattere della parola. Usandolo io stesso –

+0

grazie, ma non funziona in modalità visuale (con 'vmap'). – Chinggis6

2

è anche possibile utilizzare macro

q<register> <C-c> b ~ ll i q 

e poi fare @<register> ogni volta che è necessario utilizzarlo.

+0

Il problema con questo approccio è che la lunghezza di "ll" è incerta per ogni parola. – Patrick

9

Personalmente, questo è esattamente il tipo di cosa che preferisco non per rendere una macro per. Non c'è bisogno di riempire il tuo .vimrc con dozzine di tali soluzioni una tantum, perché la soluzione scorre così naturalmente dalla "cassetta degli attrezzi" dei comandi Vim standard, che puoi semplicemente unire insieme come una seconda natura.

sto scrivendo una parola lunga:

the gallicizatio| 

(il | è la posizione del cursore). All'improvviso mi rendo conto che mi sono dimenticato di scrivere in maiuscolo lo G di "Gallicizzazione". Quindi, bam !, ho colpito ESC (che è mappato sul tasto di blocco maiuscole sulla mia tastiera, quindi basta un colpo di mignolo), seguito da b~A, e continuo a digitare come se nulla fosse accaduto. Quel errato g è stato capitalizzato nel tempo necessario a un utente Emacs per iniziare a muovere la mano destra verso i tasti freccia, e sono già passato al resto della frase.

Al contrario, con una macro che non ho usato da un po ', probabilmente mi ci vorrà più tempo solo per ricordare quale chiave (s) ho assegnato a quella macro. La soluzione migliore è imparare molto bene i comandi "core" importanti, che possono essere combinati al volo secondo regole semplici, con milioni di possibili effetti.

+0

Grazie per la risposta! Però, per me, ricordare una sequenza di comandi incorporata non fa differenza, quindi ricordare una mappatura o una macro creata da me. Anche se su una nuova macchina, senza una mappatura preferita, si deve tornare a ciò che ricorda sui comandi incorporati :) – Patrick

+1

@Patrick: il punto è che * non * è necessario ricordare la sequenza di comandi incorporata ('b ~ A' in questo caso). Ti ricordi un numero relativamente piccolo di singoli comandi incorporati e le * regole * per combinarle in modi illimitati. Allo stesso modo in cui puoi costruire frasi in inglese infinite, nuove, ricordando un numero finito di morfemi e le regole per combinarli. –

+0

un utente di Emacs farebbe 'M-b'' M-c' per ottenere lo stesso risultato e non passare ai tasti freccia –

2

Mi trovo spesso a farlo e utilizzando la riga di comando EX per ottenere più record che corrispondono a una condizione. In questo caso, io uso un backreference che assomiglia a questo:

:%s/\(\w\)\(\w*\)/\U\1\L\2/g

e BOOM, problema risolto in tutte le parole che sono in un certo contesto.

EDIT: Guardate anche qui, solo capito che c'era questo link, che ha le risposte simili:

Capitalize first letter of each word in a selection using vim