Perché amo Vim: sono le caratteristiche meno conosciute che lo rendono così sorprendente

Da quando ho iniziato a utilizzare Vim nel 2016, ho scoperto diverse funzionalità meno conosciute che Vim offre immediatamente senza plug-in.

Riesci a coprire alcune nozioni di base prima di iniziare a divagare su queste nuove cose?

Oh certo! Prima di copiare incollare alcuni comandi da un cheatheet, farò un'ipotesi audace: non lo leggeresti se volessi un cheatsheet e conoscessi già le basi di Vim.

Potresti aver appena sentito che le distribuzioni Linux vengono fornite con un editor di testo della riga di comando predefinito chiamato Vim, e potresti voler provare.

Quindi, supponiamo che tu sia completamente nuovo in tutto questo gioco e partiamo proprio da ciò di cui abbiamo bisogno come basi (senza storia / teoria noiosa).

NOTA: se conosci le basi, fai clic qui per scorrere oltre

Qual è il tuo affare qui rispetto a tonnellate di altri articoli su Vim?

La maggior parte degli articoli introduttivi su Vim iniziano con le modalità di Vim, inserendo, salvando e uscendo. Se sei davvero dell'umore della modalità di apprendimento della perfezione teorica, sentiti libero di leggere tutto ciò che aiuta nei wikibook.

Ci sono anche alcuni grandi libri e articoli che ti dicono che c'è una filosofia dietro il modo in cui Vim funziona e che i comandi in VI / Vim sono pensati per essere combinati. Assolutamente vero e sono sicuro che lo apprezzerai una volta che ti sarai abituato all'editore e al potere che offre.

Ho ascoltato storie divertenti e visto immagini divertenti sull'apprendimento della curva di Vim. È vero? In realtà è così male?

Bene, gli odiatori odieranno Tuttavia, secondo me, l'immagine che in qualche modo dà una rappresentazione adeguata di Vim è:

Per gentile concessione: https://pascalprecht.github.io/2014/03/18/why-i-use-vim/

La maggior parte degli articoli su Vim si riferisce all'apprendimento * curva * come apprendimento * muro *, ma ehi, c'è una certa positività: guarda l'altro lato del muro!

Per i principianti, è letteralmente un muro poiché non hanno mai fatto nulla di simile prima di usare un editor da riga di comando. La cosa che mi ha attratto maggiormente quando ho iniziato come principiante è stata l'ubiquità di Vim.

Accedi a qualsiasi macchina (non Windows) da qualsiasi terminale e puoi letteralmente ottenere un editor digitando * vi * con gli occhi chiusi. L'editor apparirà davanti a te!

Un'altra cosa che mi ha attratto è la capacità di lavorare senza mouse e senza perdere tempo produttivo sul touchpad o ottenere un mouse per laptop.

Lo so, lo so, posso sentire alcuni di voi che urlano “Emacs! Emacs! ”Ho capito. Ma una volta che sono stato agganciato a Vim, non ho mai avuto alcun interesse per Emacs (potrebbe essere a causa dell'installazione richiesta). Quindi, sì, anche Emacs è fantastico, immagino. Sentiti libero di saltare la nave prima di iniziare a navigare in questo bellissimo viaggio con VI (m).

Ho appena aperto il mio terminale e digitato vi e ho premuto il tasto Invio. Tutto quello che vedo è una schermata di benvenuto. Non riesco a digitare e non so come uscirne. Sei sicuro che sia un potente editor con funzionalità?

Sicuro al 100%. Il comportamento a cui hai appena assistito è il * muro * che abbiamo visto in precedenza. Fidati di me VI (m) può fare molte altre cose. Ha solo i suoi modi di usarlo. Puoi modificare i file, aprire le schede, dividere lo schermo in orizzontale o in verticale, sfogliare il file system, eseguire i comandi di linux senza lasciare il tuo file, attivare la creazione di build dal codice sorgente senza uscire dal file, directory dei segnalibri, ancora meglio: linee di segnalibri di un file, trova e sostituisci le parole, ovviamente copia-incolla e molto altro.

Si! Questo è un grosso problema per un editor per supportarli. Meh! Lo fanno tutti. Qual è il grosso problema?

Non c'è un grosso problema, l'unica cosa che vedo è la possibilità di concentrarmi sul tuo file / codice senza lasciare la tastiera. Davvero, se non ti dispiace usare un mouse, vai avanti e apri il tuo editor di MS word / GUI e fai tutte le modifiche che desideri fare.

Giusto. Ma, sul serio, perché non un IDE per qualche lavoro?

Ok, quindi sei uno sviluppatore e hai avuto simpatia / amore per un IDE. No, VI (m) non sostituisce il tuo IDE lucido. VI (m) non ha le straordinarie funzionalità del tuo IDE. VI (m) ha dimensioni ridotte (pacchetto e installazione) rispetto agli ingombranti IDE ed è disponibile per l'uso senza alcuna configurazione e installazione. Seriamente, VI (m) non può competere con alcune grandi cose fornite dal tuo IDE.

Basta parlare, mostrami le basi?

Certo, prima di iniziare, tieni presente che qualsiasi utente di Vim deve fondamentalmente gestire la modalità di comando e la modalità di inserimento. Non c'è scampo (letteralmente, non il tasto Esc).

Supponiamo che tu stia utilizzando un editor e desideri eliminare una lunga funzione in linguaggio C. I semplici passaggi che esegui sono: Posiziona il cursore all'inizio della riga, quindi premi Maiusc + Freccia giù fino alla fine o usa il mouse. Questa azione che dovevi fare per selezionare quelle righe ti richiedeva di * interrompere * la digitazione e premere i tasti. Non è vero? Non dirmi che stavi scrivendo qualcosa e contemporaneamente hai premuto i tasti per selezionare magicamente il corpo della tua funzione.

Essere ragionevole. Hai interrotto la digitazione e la selezione ha funzionato per dire al tuo editor che vuoi fare qualcosa con questo testo (copia / taglia / grassetto / corsivo / qualsiasi cosa).

Questa pausa che hai fatto equivale ad essere in modalità comando in VI (m). Questo è il momento in cui dici a VI (m) che vuoi fare alcune azioni su alcune righe / parole / qualsiasi cosa e che non intendi digitare. Ora VI (m) ti mette fuori dalla modalità di inserimento e sei bloccato fuori dalla digitazione del testo nel tuo file. Ovviamente, l'altra modalità in cui è possibile digitare il file è la modalità di inserimento.

A proposito, se ti stavi chiedendo come stai selezionando il corpo della funzione senza selezionare il testo o usando il mouse, lo realizzo posizionando il cursore sulle parentesi graffe di apertura e usando i tasti: d%

Sì, questo elimina il contenuto del corpo della funzione. No, questa non è una combinazione inquietante di chiavi da ricordare! d indica che desideri eliminare qualcosa. % sposta il cursore alla fine della parentesi graffa corrispondente.

Ora che abbiamo stabilito le modalità di base, tuffiamoci nel VI di base (m).

Se conosci il nome del file che stai scrivendo:

$ vi myfile.c

Se non si è sicuri del nome del file e si desidera iniziare a digitare:

$ vi

Non appena apri vi, sarai in modalità comando. Per accedere alla modalità di inserimento, premere i. Digita quello che desideri. Premere Esc per tornare alla modalità di comando. Ora hai alcune opzioni per uscire a seconda di come hai aperto vi.

Se hai dato un nome file:: w scriverà quelle modifiche in modo sicuro sul disco. : q uscirà dall'editor. È possibile combinare queste azioni con:: wq e il tasto Invio

Se non è stato assegnato un nome file:: wq nomefile.c scriverà il contenuto nel file nomefile.c ed esce dall'editor. Se non sei interessato al testo che hai scritto e desideri uscire senza salvare nulla:: q! e sei fuori! Il ! è richiesto alla fine di dire: "Sì, sono sicuro di non voler salvare i contenuti e voglio uscire urgentemente"

Ecco qua! Hai appena creato, modificato e salvato (o potrebbe non essere) il tuo primo file vi. Congratulazioni

Come ho detto prima, questa non è un'introduzione per principianti a VI (m). Ci sono molti altri articoli (fornirò un riferimento alla fine dell'articolo) per iniziare. Ho appena inserito questa introduzione in modo da non rimanere deluso dopo essere atterrato su questa pagina e non aver trovato nulla da imparare to

Questa è la linea in cui i principianti salutano gli utenti intermedi e si recano alla sezione di riferimento per articoli introduttivi più brillanti.

Benvenuto agli utenti intermedi. Queste sono alcune fantastiche funzionalità di VI (m) di cui non ero a conoscenza. Ma ora li uso quotidianamente per essere più produttivo.

Per quelli di voi che preferiscono TL; DR:

  • tab-pagine
  • sessioni
  • numeri di riga (+ segni) e copia / incolla
  • pieghe
  • rientro con =
  • insert-completamento
  • netrw
  • gruppi / finestre
  • :! e un po 'di: make

Vim tab-pages

Hai menzionato le schede in Vim? Non sapevo che esistesse!

Infatti, NO! Una scheda è una pagina con una o più finestre con un'etichetta (aka scheda) nella parte superiore.

Se sei interessato a saperne di più su finestre, buffer, schede: dettagli tecnici

Dare un'occhiata:

Schede Vim in azione

passi:

  • Apri Vim con qualsiasi file o solo Vim: $ vim file1
  • Digita il contenuto del file ed entra in modalità comando (Premi Esc)
  • : tabedit file2, aprirà una nuova scheda e ti porterà a modificare file2
  • : tabedit file3, aprirà una nuova scheda e ti porterà a modificare file3
  • Per navigare tra queste schede, puoi essere in modalità normale e digitare: gt o gT per passare rispettivamente alla scheda successiva o alla scheda precedente. Puoi anche navigare verso una particolare scheda indice (indicizzata da 1) usando {i} gt dove, i è l'indice della tua scheda. Esempio: 2gt ti porta alla seconda scheda
  • Per passare direttamente alla prima o all'ultima scheda, è possibile immettere quanto segue in modalità di comando:: tabfirst o: tablast rispettivamente per la prima o l'ultima scheda. Per spostarsi avanti e indietro:: tabn per la scheda successiva e: tabp per la scheda precedente
  • Puoi elencare tutte le schede aperte usando:: tabs
  • Per aprire più file nelle schede: $ vim -p source.c source.h
  • Per chiudere una singola scheda:: tabclose e per chiudere tutte le altre schede tranne quella corrente:: tabonly. Usa il suffisso! per sovrascrivere le modifiche ai file non salvati

Penso che questa funzione ci consenta di risparmiare tempo in modo efficace condividendo il buffer tra le schede e consentendoci di copiare e incollare tra le schede e mantenere più sessioni di diverse schede impostate per la categoria di lavoro. Esempio: è possibile avere una scheda terminale con tutte le schede Vim dei soli file del codice sorgente C e si può avere un'altra scheda terminale con tutte le schede Vim dei file di intestazione (.h).

Le schede offrono tanta comodità per mantenere aperti tutti i miei file e accedervi quando voglio. Tuttavia, non è un problema aprire tutte le schede ogni volta che riavvio o chiudo e apro il terminale?

Destra! A tutti noi piace avere le nostre sessioni di lavoro in cui lavoriamo con una serie di file e vorremmo che Vim ripristinasse quella sessione di schede come l'abbiamo lasciata.
Vim ci consente di salvare e ripristinare quelle sessioni tab!

passi:

  • Apri un numero qualsiasi di schede con cui desideri lavorare
  • Da qualsiasi scheda, premere Esc e accedere alla modalità di comando
  • Digita: mksession header-files-work.vim e premi invio
  • La sessione corrente di schede aperte verrà archiviata in un file header-files-work.vim
  • Per vedere il ripristino in azione, chiudi tutte le schede e Vim
  • O avvia vim con la tua sessione usando: $ vim -S header-files-work.vim o apri vim con qualsiasi altro file ed entra in modalità comando per digitare:: header header-files-work.vim e BOOM! Tutte le tue schede sono aperte per te proprio come l'hai salvata!
  • Se si modificano le schede di una sessione (chiudi / apri nuovo), è possibile salvarle indietro usando:: mks! mentre sei nella sessione

Posso copiare / tagliare la pasta senza conoscere i numeri di riga?

Oh si! Prima vedevo i numeri di riga (: set nu) delle funzioni che volevo copiare / tagliare. Diciamo che voglio copiare / tagliare le linee da 34 a 65. Ho usato: 34,65y (Copia / Yank) o: 34,65d (Taglia / Elimina).

Ovviamente contare le righe e usare {n} yy o {n} dd (dove n è il numero di righe) non è un'opzione per centinaia di righe

Ci possono essere alcune funzioni che si estendono su più pagine e non vuoi andare giù solo per dimenticare quale era il numero della prima riga. C'è un modo semplice per raggiungere questo obiettivo senza preoccuparsi di numeri di riga!

passi:

  • Entra in modalità normale, vai alla linea di partenza
  • Digita mk (Contrassegna il punto con l'alfabeto "k" o usa qualsiasi altro alfabeto)
  • Scorri verso il basso (pagina giù o altro) e passa alla linea di fondo
  • yk strapperà / copierà tutte le linee dall'inizio alla fine
  • d'k taglierà / eliminerà tutte le righe dall'inizio alla fine

Ho alcune fastidiose funzioni lunghe nella parte superiore del mio file e non voglio perdere tempo a scorrere o saltare alle righe. Questo può essere molto da chiedere perché questo non è un IDE ma, per caso, possiamo piegare i blocchi di codice?

Assolutamente! Diciamo che vuoi saltare il ricordo di quei numeri di riga e andare in giro con il tuo nuovo amore trovato * gli indicatori *. Vai all'inizio del corpo della funzione e digita mb. Ora, vai alla fine del corpo della funzione usando% (abbinamento parentesi graffa) o qualsiasi altra tecnica conveniente e premi zf'b e il gioco è fatto!

Prima e dopo:

Prima dopo

Se hai dimestichezza con i numeri di riga, il comando è ancora più facile da ricordare:: 5,16fo (fo sta per code fold). Dopo aver piegato il codice, è facile alternare le visualizzazioni aperte e chiuse utilizzando zo (Apri la piega del codice) e zc (Chiudi la piega del codice). Non stressarlo così tanto. Basta usare za per alternare tra le pieghe aperte e quelle chiuse

Supponiamo che tu abbia trascorso molto tempo a piegare le tue funzioni in un file di grandi dimensioni, ovviamente vorresti conservare quelle pieghe ogni volta che apri quel file giusto? (In caso contrario, perché hai sprecato la tua energia piegandoli !?), quindi c'è una soluzione proprio nel tuo ~ / .vimrc. Inserisci le seguenti righe in ~ / .vimrc e le tue pieghe del codice vengono salvate e ripristinate:

autocmd BufWinLeave *. * mkview
autocmd BufWinEnter *. * silent loadview

Di solito sono attento con il mio rientro ma a volte devo modificare qualche altro codice sorgente di idiota e mi dà fastidio modificare il suo codice senza rientro. Ci sono dei tasti magici per farlo accadere?

Sicuro! È semplice come: = i {. Davvero tutto qui! (i è oggetto interno)

Prima dopo:

Prima dopo

Tutto quello che devi fare è posizionare il cursore in qualsiasi punto all'interno di un blocco che vuoi rientrare, premi Esc per entrare in modalità normale e poi: = i {. Boom! L'intero corpo della funzione (compresi i blocchi interni) è rientrato.

NOTA: non aspettarti il ​​rientro dei tuoi file Python . Funziona solo quando Vim può identificare l'inizio e la fine usando le parentesi di apertura e chiusura)

Puoi anche aumentare / diminuire il rientro all'interno di un blocco usando:> i {per aumentare e

Potrei sognare ma (* voce tremante *), voglio dire, voglio solo provarlo, Uhmm, potrei spingerlo davvero lontano con questo ma (* 5 secondi di pausa *) .. non importa, lasciamoci muovere alla mia prossima domanda

Vim ha una mentalità aperta per prendere le critiche o affrontare il fatto che non è un IDE, vai avanti, vediamo cosa hai.

Uhmmm, scusa ma per caso (* ansimando *) con qualsiasi plugin o qualcosa del genere, vim ha il completamento automatico come un IDE?

Potresti essere sorpreso, ma sì lo fa! e indovina cosa ...
* tamburi *
* tamburi *
* tamburi *
* tamburi *

Senza un plugin!

Mi hai sentito bene! L'unica condizione per Vim di mostrarti le opzioni è "Vim dovrebbe sapere di cosa stai parlando". Potrebbe essere attraverso un file sorgente incluso o funzioni o variabili definite.

Tutto quello che devi fare è iniziare a digitare e quindi premere Ctrl + n in modalità inserimento.

Esempi in C, Python e Java

Immagina solo gli usi! Soprattutto se stai scrivendo il codice C e non riesci a ricordare l'esatta chiamata in libreria OpenSSL, tutto ciò che devi fare è includere l'intestazione!

Auto-completamento di Vim con le funzioni OpenSSL

Lasciatemi ricordare ancora: nessun plug-in richiesto required

NOTA: i file di intestazione potrebbero trovarsi in altre posizioni su Mac e Vim potrebbe non essere in grado di trovarli. Uso solo un Mac per accedere a una macchina Linux. Quindi, se stai usando il Mac, mi dispiace per quello.

Capisco che Vim è solo un editor di testo, ma se vuoi che lavori senza perdere la concentrazione e senza uscire di tanto in tanto da Vim, quali opzioni ho se non riesco a ricordare tutti i nomi dei file?

Semplice, utilizza il file explorer fornito da VIM Sì, Vim fornisce un semplice file explorer (* senza alcun plug-in *). Basta digitare:: Esplora da qualsiasi finestra di Vim e vedrai un file explorer facile da navigare che può essere navigato usando i tasti freccia e . Premere il tasto Invio / Ritorno per aprire un file / directory. Usa: q per uscire da explorer e vim. Se non desideri uscire da vim e continuare a lavorare con un file aperto, hai 3 opzioni:

  1. Apri l'esploratore in una divisione orizzontale (: Sexplore) o verticale (: Vexplore) ed esci dall'esploratore usando: q
  2. Apri Explorer in un'altra scheda usando: Texplore ed esci usando: q
  3. Apri Esplora file nella finestra corrente, quindi scarica il buffer corrente ed eliminalo dall'elenco dei buffer utilizzando: bdel (eliminazione buffer).
: Esplora da qualsiasi finestra di VIM mostra Esplora file
NOTA: è inoltre possibile utilizzare il comando breve: Ex per aprire Esplora file

A volte devo ripetere gli stessi passaggi su alcune righe per modificare qualcosa. Sono abbastanza sicuro che Vim avrà alcune funzionalità che mi consentono di farlo. Ho ragione?

100% giusto! Stai parlando di macro e Vim supporta le macro. La ripetizione dell'ultimo comando eseguito è semplice e può svolgere semplici compiti ripetitivi. Tuttavia, se l'elaborazione del testo è composta da diversi passaggi per ottenere un risultato, le macro sono utili.

Considera un file di intestazione C di esempio:

void encrypt_text (char * text, int bytes)
void decrypt_text (char * text, int bytes)
void process_text (char * text, int bytes)
void another_important_function (int byte, doppia precisione)

Oops! Hai dimenticato di mettere un punto e virgola alla fine di ogni riga e ti sei anche reso conto che tutte queste funzioni restituiscono un codice di errore intero anziché nullo.

I passaggi che è necessario eseguire per apportare modifiche in una riga sono:

  • Posiziona il cursore all'inizio della parola nulla
  • Premere cw in modalità normale per eliminare la parola nulla e digitare int
  • Premi Esc, sposta alla fine della riga usando Maiusc + a per inserire;
  • Premere Esc e premere ^ per tornare all'inizio della riga modificata

Con il risultato di:

int encrypt_text (char * text, int bytes);
void decrypt_text (char * text, int bytes)
void process_text (char * text, int bytes)
void another_important_function (int byte, doppia precisione)

Puoi semplicemente registrare questa sequenza di passaggi e riprodurla su tutte e 4 le righe.

Tutto quello che devi fare è, prima di iniziare la sequenza, iniziare a registrare la macro in qualsiasi alfabeto (diciamo a) premendo qa in modalità normale. Ora i tuoi passi vengono registrati in a. Una volta terminati tutti i passaggi, premi q in modalità normale. Questo terminerà la registrazione. Per ripetere questi passaggi, basta mantenere il cursore nello stesso punto in cui è stato posizionato durante la macro. Premi @a e abbiamo finito! BOOM! Vim ripeterà gli stessi passaggi per te su quella linea! Per ripeterlo su più righe, puoi anche usare @@ dopo aver usato @a il comando una volta

So che Vim non è affatto vicino a un IDE e potrei avere qualche irragionevole speranza ma solo una domanda veloce: la modifica remota dei file è possibile con Vim?

Se ci pensi considerando le risorse disponibili:
[1] Vim
[2] openssh-client (viene installato con la maggior parte delle versioni di Linux)

Sei fortunato amico mio! Sì, Vim supporta la modifica remota dei file
Vim utilizza solo la connessione sicura stabilita da scp (copia protetta) fornita da openssh-client. Ci sono momenti in cui lavori con file su più macchine remote ed è una perdita di tempo accedere a una macchina solo per modificare un singolo file! Puoi rilassarti nella tua macchina attuale se conosci solo le credenziali e il percorso della tua macchina remota.

vim scp: // remoteuser @ remote_IP_or_hostname / relative / path / of / file

Ad esempio: ho bisogno di modificare un file su 10.0.18.12 memorizzato in /home/dev-john/project/src/main.c e ho le credenziali di accesso per dev-john, posso accedere al main.c usando:

$ vim scp: //dev-john@10.0.18.12/project/src/main.c

Posso usare il relativo percorso perché, posso iniziare a cercare il file dalla home directory di dev-john

SUGGERIMENTO: se si accede frequentemente a una macchina remota, è possibile creare un file di configurazione ssh per creare un collegamento per la connessione. Crea un file ~ / .ssh / config con

Host remoto-dev-machine
    Nome host 10.0.18.12
    User dev-john
    IdentityFile ~ / .ssh / id_rsa

Ora puoi accedere al tuo file usando:

$ vim scp: //remote-dev-machine/project/src/main.c

Se è complicato ricordare il percorso relativo e non intuitivo, puoi anche specificarlo con un'alternativa:

$ vim scp: //remote-dev-machine/~dev-john/project/src/main.c

Eccezionale! Sono già entusiasta delle capacità immediate di Vim. Sembra che tu abbia una soluzione a molti problemi di modifica comuni. Vediamo. Ho un file con oltre 2000 righe e le funzioni di mio interesse si trovano alla riga 9, riga 768 e riga 1898. So che posso passare a una riga utilizzando il numero di riga ma non sono così bravo a ricordare quei numeri. Hai qualcosa per me?

Inferno sì! Quello che stai cercando è una soluzione di segnalibro locale in Vim usando le lettere. Tutto quello che devi fare è:

  • Posiziona il cursore su qualsiasi linea in qualsiasi posizione
  • Premi Esc per assicurarti di essere in modalità normale
  • Premi m {lowercaseletter} dove {lowercaseletter} è qualsiasi lettera dalla a alla z
  • Hai appena creato un segnalibro locale per navigare nel tuo file

Per visualizzare tutti i segnalibri: premere Esc e accedere alla modalità di comando, digitare: segna e premere Invio / A capo. Vedrai un elenco dei tuoi segnalibri. Per visitare qualsiasi segnalibro in qualsiasi momento, basta premere Esc e digitare `{lowercaseletter}. Kaboom! Arriverete nella stessa posizione esatta con il cursore in cui avete inserito i segnalibri. Esempio:

Segnalibri in Vim

Ho creato un segnalibro locale alla riga 21, colonna 18 usando a. Se sto modificando qualcosa sulla riga 1783, vorrei semplicemente premere Esc e digitare `a:

Per risolvere il tuo problema, tutto ciò che devi fare è creare 3 segnalibri locali e passare rapidamente a loro guardando: segni.

Problema risolto

E se ti dicessi che puoi creare anche segnalibri globali ?! Sì, è anche possibile creare segnalibri globali! Questi sono equivalenti ai collegamenti di Windows o della GUI (o dei softlink / hardlink di Linux), tranne per il fatto che non è necessario creare un collegamento effettivo. Mi hai sentito bene! Puoi letteralmente saltare dalla modifica di un file in / dir1 a un altro file e allinearti / project / src / dal tuo Vim senza uscire!

Non preoccuparti, non è una cosa nuova da ricordare. Tutto quello che devi fare è:
Utilizzare una lettera maiuscola anziché una lettera minuscola per creare un segnalibro globale. È tutto! Veramente! Passa al segnalibro globale usando lo stesso processo. Esempio: se hai creato un segnalibro usando mP, tutto ciò che devi fare è premere Esc e digitare `P e BAM! Vai al tuo segnalibro globale (Vim ricorda il percorso, quindi non devi digitare nulla sul percorso)

È possibile accedere ai segnalibri globali allo stesso modo dei segni locali::

: marchi
segna linea col file / testo
 P 53 4 ~ / project / src / large-file.c
 A 11 0 ~ / project / README.md

NOTA: se non si è interessati alla posizione del cursore e si desidera solo essere presenti all'inizio della riga del segnalibro, utilizzare 'P invece di `P (utilizzare una virgoletta singola anziché il segno di spunta indietro per posizionarsi all'inizio della riga )

Ho sentito che Vim supporta la suddivisione delle finestre con le schede! Capisco che le schede sono fantastiche e puoi lavorare con più file aperti contemporaneamente. Ma che dire di dividere? Perché dovrei volerlo?

scenari:

  • Potresti voler modificare un file guardando contemporaneamente un altro file (potrebbe essere che stai definendo una funzione C guardando la sua dichiarazione in un file di intestazione)
  • Potresti voler modificare una parte di un file osservando contemporaneamente la parte superiore / inferiore dello stesso file
  • Il tuo lavoro potrebbe richiedere di modificare un file guardando contemporaneamente diverse parti di file diversi

Vim supporta la suddivisione dello schermo sia in orizzontale che in verticale. Ancora meglio, puoi anche sfogliare il file system per aprire un file quando dividi lo schermo.

Ecco le opzioni disponibili:

: dividi nome file - divide la finestra in orizzontale e carica il nome file
: file vsplit - divisione verticale e file aperto
ctrl-w freccia su - sposta il cursore su una finestra
ctrl-w ctrl-w - sposta il cursore su un'altra finestra (ciclo)
ctrl-w _ - massimizza la finestra corrente in verticale
ctrl-w | - massimizzare la finestra corrente in orizzontale
ctrl-w = - rende tutte uguali
: sview file - uguale a split, ma di sola lettura
: chiudi - chiude la finestra corrente
Finestra normale (in alto a sinistra),: diviso <file> (in alto a destra),: vsplit <file> (in basso)

Massimizzare una finestra per il lavoro:

Il riquadro deve essere ingrandito verticalmente e orizzontalmente per occupare l'intera finestra

Ridimensionamento:

CTRL-W [N] - Riduce l'altezza della finestra corrente di N (impostazione predefinita 1)
CTRL-W [N] + Aumenta l'altezza della finestra corrente di N (impostazione predefinita 1)
CTRL-W [N]  Aumenta la larghezza della finestra corrente di N (impostazione predefinita 1)

C'è un modo per utilizzare Esplora file mentre divido i riquadri? (Non ricordo e digito sempre i nomi dei file!)

Ovviamente, tutto ciò che devi fare è digitare:: Sexplore per esploratore di file orizzontale e: Vexplore per esploratore di file verticale. Puoi anche usare: Vexplore! per aprire il file explorer sul lato destro (invece che sul predefinito sinistro)

Ancora una volta, tutto questo funziona * senza plug-in extra *

Sono nel mezzo della modifica del codice e devo eseguire rapidamente un comando shell. Devo salvare il mio lavoro, uscire da Vim ed eseguire i miei comandi? Scommetto che c'è una via d'uscita migliore con Vim

Scommetti! Vim non vuole che tu lasci Vim e vuole che tu continui a concentrarti sul tuo lavoro. Da qui l'opzione per eseguire i comandi di shell all'interno di Vim. Non ti preoccupare, tutto il tuo lavoro non salvato non viene scartato, esegui semplicemente il tuo comando e BAM! sei tornato al tuo file non salvato / salvato in modo sicuro!

Diciamo che sei nel mezzo di una sessione di codifica e che devi rapidamente uscire per dare un'occhiata alla pagina man delle operazioni sui file perché hai dimenticato la firma! Non devi salvare il tuo lavoro, uscire da Vim e quindi controllare le pagine man o non devi aprire un'altra scheda solo per la pagina man. È possibile emettere il comando direttamente dall'editor Vim.

Da sinistra a destra (esegui i comandi della shell da Vim e torna all'editor)

Indovina un po! Preparati a stupirti. Vim supporta anche il comando make dal tuo file! Tutto quello che devi fare è navigare in una directory con Makefile. Apri qualsiasi file (potrebbe essere il tuo codice sorgente) e apporta tutte le modifiche e salvalo. Aspetta, non è necessario uscire per vedere il risultato della compilazione. Puoi attivare il tuo make build direttamente da Vim:

Avvio di build da Vim

Allo stesso modo puoi costruire altri obiettivi nel tuo Makefile!

Esempio: creazione della pulizia della directory

Pulizia della directory usando il comando make da VIM

Spero che queste fantastiche funzioni ti aiuteranno a utilizzare Vim in modo più produttivo.

Il tuo feedback è sempre il benvenuto.

Sentiti libero di commentare, criticare o applaudire

Riferimenti:

  • http://www.openvim.com/tutorial.html
  • https://linuxconfig.org/vim-tutorial
  • ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf
  • http://vim.wikia.com/wiki/Tutorial
  • http://www.viemu.com/a-why-vi-vim.html
  • http://robertames.com/files/vim-editing.html
  • https://www.youtube.com/watch?v=wlR5gYd6um0