VIM Navigazione super veloce


91

L'unica cosa che mi manca dell'utilizzo di altri editor è trovare il mio posto con il mouse. Posso guardare con gli occhi un'area specifica del file e con un movimento del mouse e un clic ci sono. Con VIM devo jjjjjkkkkkkjjjjhhhh ... quasi ci hhhhh oh merda mi sono perso per 3 caratteri, lll.

Sto imparando a fare i segni e ho trovato un plug-in per i segnalibri che è fantastico, posso creare marcatori e distruggerli con <f3> e navigare verso di essi purtroppo i segni vengono dimenticati quando il file viene chiuso.

Come fate a navigare in tutti i file? So che potrei anche fare 5j7k4j5h e così via, ma deve esserci un plugin che possa leggere i miei occhi e posizionare il cursore dove ne ho davvero bisogno ..

Ho anche imparato a usare /% per cercare un termine specifico. Aiuta, ma tutti i caratteri corrispondenti sono evidenziati in tutto il documento.


Ottime risposte tutte, mentre siamo ancora in argomento ho pensato di poter sperimentare qualcosa come nG (vai alla riga Numero) f% (trova il primo carattere di quello che sto cercando, o come qualcuno ha suggerito usa w per andare avanti alla parola successiva
Helmut Granda,

Risposte:


172

Provare $ vimtutor , ti insegnerà tutto ciò che devi sapere per iniziare.

hjkl sono la punta dell'iceberg e sono usati molto raramente, almeno nel mio caso.

wWEee BbgegEtutti permettono di spostarsi parola per parola:

  • we evai avanti We Eprendi in considerazione gli spazi bianchi e la punteggiatura

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • be getorna indietro Be gEprendi in considerazione gli spazi bianchi e la punteggiatura

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtTsono usati per raggiungere un particolare carattere sulla riga corrente e ;,sono usati per ripetere quel movimento, nella stessa direzione per ;e nella direzione opposta per ,:

  • fmsalta sul successivo mavanti, Fva indietro

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tmsalta PRIMA del prossimo mavanti, Tva indietro

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? sono usati per saltare alla prima occorrenza di un motivo dalla posizione corrente del cursore:

  • /pattern va avanti

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern va indietro

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ vengono utilizzati per passare al primo e all'ultimo carattere della riga.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ vengono utilizzati per passare al primo e all'ultimo carattere stampabile della riga.

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

Singolo e combinato ()[]{}vengono utilizzati per spostare frase per frase o paragrafo per paragrafo o blocco di codice per blocco di codice.

<C-b>e <C-f>sono usati per scorrere la schermata avanti e indietro.

<C-u>e <C-d>sono usati per scorrere di mezzo schermo avanti e indietro.

H, ME Lspostare il cursore nella parte superiore, centrale, inferiore della finestra, rispettivamente.

zt, zzE zbspostare la linea sotto il cursore verso l'alto, medio, inferiore della finestra, rispettivamente.

E così via.

:help motion.txt ti lascerà a bocca aperta.


17
Di solito non lo faccio, ma questo commento è solo per dirti che questa è un'ottima risposta!
jojo

Per qualche ragione, non avevo mai usato H, M o L prima, ottimi consigli!
Chris

Aggiungendo quello ]}e [{(2 sequenze di tasti) si salta alla fine o all'inizio di un ambito (ad esempio uno definito da{ ... }
Matthew Woo,

3
Bene, questo ancora non risponde alla domanda di OP su how to jump to a line he's seeing like using a mouse. Conosco e uso tutte le associazioni di tasti che hai menzionato tutto il tempo. Ma non è ancora efficiente come puntare un mouse quando si salta a grande distanza.
Penghe Geng

sì H, M, L sono facili da ricordare: High, Middle, Low;) @Chris
nils petersohn,

25

oltre al comando di movimento di vim, trovo che un plug-in vim chiamato EasyMotion sia piuttosto utile per navigare, se hai familiarità con vimperator o pentadactyl, EasyMotion riporta la modalità suggerimento su vim. ecco una demo animata ed ecco il video tutorial. Spero ti sia utile.


Il vantaggio di easescore è che puoi andare ovunque sullo schermo con solo 3 sequenze di tasti.
Xavier T.

+1: EasyMotion è davvero un jetpack del movimento di Vim. (a proposito, anche PreciseJump. In realtà, EasyMotion è figlio di PreciseJump)
Dmitry Frank

2
Come diavolo ha fatto l'autore di EasyMotion a ottenere questa linea di stato fantastica nella demo?
Cyrille

1
La "linea di stato super fantastica" è un plugin chiamato "Powerline". È qui: vim.org/scripts/script.php?script_id=3881
DEzra

potresti aggiornare l'URL della demo animata? non funziona più
brauliobo

20

Ci sono un'infinità di modi per muoversi in vim, questa è una delle sue aree di forza. Uso {e }molto, che si sposta su e giù fino alla riga vuota successiva in quella direzione. %è utile per spostarsi avanti e indietro su una parentesi corrispondente (di qualsiasi tipo). We Bandare avanti e indietro di una "parola".

Potrebbe valere la pena rivedere la sezione Spostarsi nel manuale di Vim.


4
Probabilmente vale anche la pena menzionare il paging su e giù usando Ctl + U e Ctl + D, rispettivamente.
Nick

10

vim ha il supporto per il mouse! provalo (nel tuo .vimrc):

set mouse=a

nota a margine : come utente dello schermo, ho scoperto di aver bisogno anche di

set ttymouse=xterm2

affinché funzioni.


4
Buono a sapersi, tuttavia continuerò comunque a cercare la perfetta navigazione rapida senza bisogno del mouse.
Helmut Granda

9

personalmente preferisco usare:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position


5

A parte {, }, (, ), <number>cb, <number>cB, <number>cWe %, io uso queste tecniche la navigazione:

  • ciw, diw( ciW, diW). ecc. per modificare / eliminare rapidamente la parola sotto il cursore (compresi i caratteri non spazi)
  • ci(, ci"( ca(, ca"), ecc. per modificare rapidamente tra parentesi, virgolette (comprese parentesi, virgolette). Lo stesso vale per d.
  • Contrassegna con lettere MAIUSCOLE per impostarle globalmente (tra i file) e in modo persistente (quando il buffer è chiuso). Ad esempio, mAcreerà un segno globale Ache sarà disponibile con il 'Acomando (o `Aper rispettare la colonna).
  • gf per andare rapidamente al file sotto il cursore
  • f, t( F, T) per spostarsi sul carattere, prima del carattere a destra (a sinistra) (usare ;per ripetere). Questi sono particolarmente utili per i comandi de c(da usare .per ripetere).
  • ^]per passare al tag e ^Ttornare indietro.

E tanti altri modi per muoverti :)

Controlla questo per ulteriori informazioni: http://www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS Per gli utenti di rails c'è un utilissimo plugin rails-vim, potresti volerlo controllare anche tu.


3

questo è un buon posto per imparare i principali comandi di navigazione, parte della potenza / velocità di vim deriva dalla combinazione di movimento con azione, cioè cw-> cambia parola, d10j-> cancella 10 righe in basso ecc. Anche questa e questa sono letture interessanti.


2

Puoi :set nohlsearchdisattivare l'evidenziazione dei caratteri di ricerca.

Navigo anche usando ctags molto.


github.com/richoH/dotfiles/blob/master/vimrc Potresti trovare altre cose utili lì dentro.
richo

Grazie per il suggerimento, stavo cercando nel tuo vimrc e ho trovato la tua nota in cui hai impostato per evidenziare la riga quando raggiungi gli 80 caratteri durante la scrittura di e-mail o documenti. Perché scrivere un'e-mail in VIM? Riesco a capire un documento per uso personale, ma non sono sicuro di un'email.
Helmut Granda

Uso mutt + vim per leggere e scrivere la maggior parte delle mie email. Uso anche il plugin è tutto testo per scrivere molti contenuti web in vim. Ho attivato il wrapping delle parole per le e-mail, ma per i collegamenti, ecc. Può essere utile avere un promemoria se non ho formattato correttamente o se le virgolette annidate stanno diventando troppo lunghe.
richo

0

Ho scritto un plugin pensando alla navigazione super veloce, si chiama senza movimento:

https://github.com/anschnapp/move-less

Ti consente di cercare comodamente il file buco scorrendo con ( h j k l-keys). Non si modifica la posizione del cursore durante lo scorrimento del sito della buca (in base al trucco pieghevole). Se interrompi la ricerca, sei esattamente da dove hai iniziato.

Per una navigazione super veloce, l'intenzione è quella di utilizzare il mio plugin per ottenere la posizione di destinazione sullo schermo e quindi saltare alla posizione corretta tramite easescore (che era già stato consigliato da un'altra risposta):

https://github.com/eas”/vim-eas”

Se combini entrambi, potresti persino anticipare la cronologia dei salti e passare dall'origine alla destinazione di destinazione semplicemente tramite <c-o>e <c-i>.

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.