Quali sono i comandi / le pressioni di tasti di vim più utilizzati?


112

Sono un programmatore Ruby che cerca di passare da Textmate a MacVim e ho problemi a guadare gli elenchi giganteschi di cose che puoi fare in VIM e tutte le pressioni dei tasti per loro. Sono stanco di sentire "Puoi usare" I "per inserire del testo," a "per aggiungere del testo dopo il carattere, o" A "per aggiungere del testo alla fine della riga, oppure ..." Non riesco a immaginare tutti usano tutte e 20 le diverse pressioni di tasti per navigare nel testo, 10 o giù di lì per iniziare ad aggiungere testo e 18 modi per selezionare visivamente un blocco interno. O tu !?

Il mio cheat sheet ideale sarebbero i 30-40 tasti o comandi più usati che tutti usano per scrivere codice su base giornaliera, insieme ai plugin assolutamente essenziali che i rubyists usano quotidianamente e ai 10 comandi più usati per loro. In teoria, una volta che ho quello e ho iniziato a diventare esperto in VIM come lo sono in Textmate, allora posso iniziare ad imparare le migliaia di altri comandi VIM che mi renderanno più efficiente.

Oppure sto imparando VIM nel modo sbagliato?


9
Riferimento obbligatorio a cafepress.com/geekcheat.11507711 .
geekosaur

1
Ricodificato per rimuovere "ruby" e aggiungere "scorciatoie da tastiera". Sembra più appropriato.

"Sto imparando Vim nel modo sbagliato?" - nah, devi solo iniziare con alcune basi e ricordare che imparerai ancora più comandi tra un anno. Forse un giorno userai davvero tutti i comandi! Ma nessuno li usa tutti dal primo giorno.
Cascabel

Risposte:


306

Ecco un foglio di suggerimenti che ho scritto una volta, con i comandi che uso regolarmente:

Riferimenti

Generale

  • Quasi tutti i comandi possono essere preceduti da un numero per il conteggio delle ripetizioni. per esempio. 5dd cancella 5 righe
  • <Esc> ti fa uscire da qualsiasi modalità e tornare alla modalità di comando
  • I comandi preceduti da : vengono eseguiti sulla riga di comando nella parte inferiore dello schermo
  • : aiuto aiuto con qualsiasi comando

Navigazione

  • Spostamento del cursore: ← hjk l →
  • A parole:
    • w parola successiva (per punteggiatura); W parola successiva (per spazi)
    • b parola di ritorno (con punteggiatura); B indietro parola (per spazi)
    • e parola finale (con punteggiatura); E parola finale (con spazi)
  • Per linea:
    • 0 inizio linea; ^ primo spazio non bianco
    • $ fine riga
  • Per paragrafo:
    • { riga vuota precedente; } riga vuota successiva
  • Per file:
    • gg inizio del file; G fine file
    • 123G vai al numero di riga specifico
  • Per marker:
    • mx imposta il segno x ; 'x vai al segno x
    • '. vai alla posizione dell'ultima modifica
    • '' torna all'ultimo punto prima del salto
  • scorrimento:
    • ^ F avanti a schermo intero; ^ B a schermo intero all'indietro
    • ^ D metà schermo inferiore; ^ U su metà schermo
    • ^ E scorre una riga verso l'alto; ^ Y scorre una riga verso il basso
    • zz centra la linea del cursore

La modifica

  • u annulla; ^ R ripeti
  • . ripeti l'ultimo comando di modifica

inserzione

Tutti i comandi di inserimento vengono terminati con <Esc>per tornare alla modalità di comando.

  • i inserisco testo cursore; Mi inserisco il testo all'inizio della linea
  • un testo per aggiungere dopo il cursore; Un testo di accodamento dopo la fine della riga
  • o aprire una nuova riga di seguito; O apri una nuova riga sopra

Mutevole

  • r sostituisce un singolo carattere; R sostituisce più caratteri
  • s cambia carattere singolo
  • cw cambia parola; C cambia a fine riga; cc cambia l'intera riga
  • c<motion> cambia il testo nella direzione del movimento
  • ci ( cambia tra parentesi (vedi la selezione dell'oggetto di testo per altri esempi)

Eliminazione

  • x elimina char
  • dw cancella parola; D cancella fino alla fine della riga; dd cancella l'intera riga
  • d<motion> cancella nella direzione del movimento

Taglia e incolla

  • yy copia la riga nel buffer di incolla; dd taglia la linea nel buffer di incolla
  • p incolla il buffer sotto la linea del cursore; P incolla il buffer sopra la linea del cursore
  • xp scambia due caratteri ( x per eliminare un carattere, quindi p per rimetterlo dopo la posizione del cursore)

blocchi

  • v flusso di blocchi visivi; V linea di blocco visivo; ^ V colonna del blocco visivo
    • la maggior parte dei comandi di movimento estende il blocco alla nuova posizione del cursore
    • o sposta il cursore all'altra estremità del blocco
  • d o x taglia il blocco nel buffer di incolla
  • y copia il blocco nel buffer di incolla
  • > rientro blocco; < unindent block
  • gv riseleziona l'ultimo blocco visivo

Globale

  • :% s / foo / bar / g sostituisce tutte le occorrenze di "foo" con "bar"
    • % è un intervallo che indica ogni riga del file
    • / g è un flag che cambia tutte le occorrenze su una riga invece che solo la prima

ricerca

  • / ricerca in avanti; ? ricerca all'indietro
  • * ricerca in avanti la parola sotto il cursore; # ricerca all'indietro la parola sotto il cursore
  • n corrispondenza successiva nella stessa direzione; N partita successiva in direzione opposta
  • fx passa al carattere successivo x ; Fx indietro al carattere precedente x
  • ; spostati di nuovo sullo stesso personaggio nella stessa direzione; , spostati di nuovo sullo stesso personaggio nella direzione opposta

File

  • : w scrive file su disco
  • : wname scrive il file su disco comename
  • ZZ scrive il file su disco ed esce
  • : n modifica un nuovo file; : n! modificare un nuovo file senza salvare le modifiche correnti
  • : q esce dalla modifica di un file; : q! uscire dalla modifica senza salvare le modifiche
  • : e modifica di nuovo lo stesso file (se modificato al di fuori di vim)
  • : e. esploratore di directory

finestre

  • ^ Wn nuova finestra
  • ^ Wj giù alla finestra successiva; ^ Vai alla finestra precedente
  • ^ W_ massimizza la finestra corrente; ^ W = rende tutte le finestre della stessa dimensione
  • ^ W + aumenta la dimensione della finestra; ^ W- diminuisce la dimensione della finestra

Navigazione sorgente

  • % salta alla corrispondenza parentesi / parentesi / parentesi graffa o al blocco della lingua se il modulo della lingua è stato caricato
  • gd vai alla definizione del simbolo locale sotto il cursore; ^ O torna alla posizione precedente
  • ^] passa alla definizione di simbolo globale (richiede tagsfile); ^ T torna alla posizione precedente (pila arbitraria di posizioni mantenuta)
  • ^ N (in modalità di inserimento) completamento automatico della parola

Mostra modifiche locali

Vim ha alcune caratteristiche che rendono facile evidenziare le linee che sono state modificate da una versione base nel controllo del codice sorgente. Ho creato un piccolo script vim che lo rende facile: http://github.com/ghewgill/vim-scmdiff


1
+1 Relativamente minimo, anche se devo ammettere che non mi trovo a utilizzare alcun comando di finestra o navigare con qualcosa di diverso dai tasti freccia / pageup / pagedown / home / end e gg / G. Oh, e per la navigazione del numero di riga puoi anche usare: 123 (modalità di comando).

2
Bel cheatsheet. Aggiungerei ^ w ^ w per scorrere le finestre ,: x invece di ZZ per coerenza, tx avanti prima del carattere e Tx all'indietro.
romainl

Dovrei notare che questa è solo la base di ciò che uso. Ho creato questo elenco come strumento per insegnare vim ad altre persone. Uso molti altri comandi meno frequentemente e ho anche vari alias e macro impostati per aiutarmi a usare vim in modo più efficace.
Greg Hewgill

2
Se vuoi evitare la Escchiave (e l'RSI?), Puoi usare ^[. ^cfunziona anche (ma non amplia le abbreviazioni). Fonte: vim.wikia.com/wiki/Avoid_the_escape_key
Lian

22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Questa è la cosa migliore in assoluto per l'apprendimento del VIM.


Non l'ho mai visto prima, un riferimento molto interessante per dopo aver saputo cosa fanno i comandi.
amccormack

3
La parte "grafica" è inutile se non hai una tastiera qwerty, però.
romainl

5
Mi stupisce che la pubblicazione di un collegamento (che è già stato postato a morte tra l'altro) attiri così tanta attenzione mentre si fa il miglio supplementare che altri poster hanno messo non ...
Lieven Keersmaekers

Il chiaro vincitore nei post di Vim: stackoverflow.com/questions/1218390/…
Justin Thomas,


4

Hai seguito il tutorial integrato di Vim? In caso contrario, vai alla riga di comando e digita vimtutor. È un ottimo modo per imparare i comandi iniziali.

Vim ha un'incredibile quantità di flessibilità e potenza e, se sei come la maggior parte degli utenti di vim, imparerai molti nuovi comandi e dimenticherai quelli vecchi, quindi imparerai di nuovo. La guida integrata è buona e degna di una navigazione periodica per imparare cose nuove.

Ci sono molte buone FAQ e cheatsheet per vim su Internet. Consiglierei di cercare vim + faqe vim + cheatsheet. Cheat-Sheets.org # vim è una buona fonte, così come il wiki di Vim Tips .


L'ho appena scoperto e per fortuna viene installato su un Mac. Provalo ora (all'1 di notte ...)
Clinton

Uso vim da molto tempo ed è una delle prime cose che installo su una macchina. MacVim , su Mac OS è molto carino. Tendo a compilare vim dalla sorgente sulla maggior parte dei box Linux che uso, semplicemente perché la maggior parte delle distribuzioni non sono aggiornate o non hanno il supporto per la lingua impostato correttamente. Continuo a una versione corrente del mio ~/.vimrc, ~/.gvimrce ~/.vimdirectory in un tar-ball per quando devo impostare qualcosa. Copiarlo ed estrarre i file mi permette di avere vim in esecuzione con tutti i miei soliti comandi e schemi di colori in pochi minuti su Windows, Mac e Linux.
Tin Man

3

Ciò che la maggior parte delle persone fanno è iniziare con le basi nude, come forse i, yw, yy, e p. Puoi continuare a usare i tasti freccia per spostarti, selezionare il testo con il mouse, usare i menu, ecc. Quindi, quando qualcosa ti rallenta, cerchi il modo più veloce per farlo e aggiungi gradualmente sempre più comandi. Potresti imparare un nuovo comando al giorno per un po ', poi passerà a uno a settimana. Ti sentirai abbastanza produttivo in un mese. Dopo un anno avrai un repertorio piuttosto solido e dopo 2-3 anni non penserai nemmeno consapevolmente a cosa stanno digitando le tue dita, e sembrerà strano se devi spiegarlo per qualcuno. Ho imparato vi nel 1993 e prendo ancora 2 o 3 nuovi comandi all'anno.


3

Il cheatsheet di @Greg Hewgill è molto buono. Ho iniziato il mio passaggio da TextMate alcuni mesi fa. Ora sono produttivo come lo ero con la Meditazione Trascendentale e costantemente stupito dal potere di Vim.

Ecco come sono passato . Forse può esserti utile.

Grosso modo, non credo sia una buona idea fare un cambiamento radicale. Vim è molto diverso ed è meglio andare progressivamente.

E per rispondere alla tua domanda secondaria, sì, uso tutto il iaIAoOquotidiano per entrare in modalità di inserimento. All'inizio sembra certamente strano, ma dopo un po 'non ci pensi davvero.

Alcuni comandi incredibilmente utili per qualsiasi attività relativa alla programmazione:

  • re Rper sostituire i caratteri
  • <C-a>e <C-x>per aumentare e diminuire i numeri
  • citdi modificare il contenuto di un tag HTML, e le sue varianti ( cat, dit, dat, ci(, etc.)
  • <C-x><C-o>(mappato su ,,) per omnicompletamento
  • selezione visiva del blocco con <C-v>
  • e così via…

Una volta che sei abituato al modo in cui Vim diventa davvero difficile non premere oo xtutto il tempo quando si modifica il testo in qualche altro editor o campo di testo.


2

Non riesco a immaginare che tutti usino tutte e 20 le diverse pressioni dei tasti per navigare nel testo, 10 o giù di lì tasti per iniziare ad aggiungere testo e 18 modi per selezionare visivamente un blocco interno. O tu !?

Lo voglio.

In teoria, una volta che ho quello e ho iniziato a diventare esperto in VIM come lo sono in Textmate, allora posso iniziare ad imparare le migliaia di altri comandi VIM che mi renderanno più efficiente.

È il modo giusto per farlo. Inizia con i comandi di base e poi scegli quelli che migliorano la tua produttività. Mi piace seguire questo blog per suggerimenti su come migliorare la mia produttività con vim.


2

tuxfiles.org contiene un bel cheat sheet. Penso che ci siano un paio di punti per imparare i comandi:

  • Leggi regolarmente il cheat sheet. Non preoccuparti di usarli tutti o di ricordare tutte le chiavi, sappi solo che il comando esiste. Cerca il comando e usalo quando ti ritrovi a fare qualcosa di ripetitivo.
  • Se ti ritrovi a fare qualcosa regolarmente (come eliminare un'intera riga dopo un particolare carattere d$), fai una rapida ricerca su Google per vedere se riesci a trovare un comando per esso.
  • Annota i comandi che pensi di trovare utili e mantieni quell'elenco dove puoi vederlo mentre scrivi il tuo codice. Vorrei discutere contro la stampa di qualcosa e invece ti incoraggerei a usare le note di post-it per pochi comandi alla volta.
  • Se possibile, osserva gli altri programmatori che usano vim e chiedi loro quali comandi stanno usando mentre li vedi fare qualcosa di interessante.

Oltre a questi suggerimenti, ci sono alcuni concetti di base che dovresti capire.

  • vim userà lo stesso carattere per rappresentare la stessa funzione. Ad esempio, per eliminare una riga dopo l'uso di un carattere d$. Per evidenziare una riga dopo un particolare carattere utilizzare v$. Quindi nota che $indica che farai qualcosa fino alla fine della riga da dove si trova attualmente il cursore.
  • uè undo ed ctrl+rè redo.
  • mettere un numero davanti a un comando lo eseguirà ripetutamente. 3ddcancellerà la riga su cui si trova il cursore e le due righe che seguono, allo stesso modo 3yycopierà la riga su cui si trova il cursore e le due righe che seguono.
  • capire come spostarsi tra i buffer utilizzare :lsper elencare i buffer e :bn, :bpper scorrerli.
  • leggi il tutorial che si trova in:help Questo è probabilmente il modo migliore per "imparare le basi" e il resto dei comandi che imparerai attraverso l'uso.

2

Mettilo nel tuo .bashrc per aprire vim con l'ultimo file modificato nell'ultima riga modificata

alias vil="vim  +\"'\"0"

1

Vai a Editing efficiente con vim e scopri cosa ti serve per iniziare. Non tutto in quella pagina è essenziale all'inizio, quindi scegli con cura quello che vuoi.

Da lì, usa vim per tutto. "hjkl", "y" e "p" ti faranno fare molta strada, anche se non è il modo più efficiente. Quando ti imbatti in un compito per il quale non conosci la chiave magica per svolgerlo in modo efficiente (o per niente), e ti ritrovi a farlo più di un paio di volte, vai a cercarlo. A poco a poco diventerà una seconda natura.

Ho trovato vim scoraggiante molte lune fa (quando non aveva la "m" alla fine), ma ci sono volute solo circa una settimana di uso costante per diventare efficiente. Lo trovo ancora l'editor più veloce in cui fare cose.


Il collegamento a "Editing efficiente con vim" ora è morto. Penso che un'alternativa possa essere trovata su robertames.com/files/vim-editing.html
Damian Powell
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.