vim modifica / passaggio tra più file in modo efficiente in strutture di directory di grandi dimensioni


11

Non sono affatto un potente utente di Vim, sto solo cominciando a cogliere i movimenti e i comandi avanzati con Vim. Ma c'è un inconveniente che non riesco a aggirare.

Sono cresciuto con programmi grafici per scrivere codice, ma di recente ho iniziato a usare vim su ssh e screen per lavorare su progetti abbastanza grandi con molte cartelle.

Sono curioso di sapere cosa fanno i master vim per lavorare con più file in modo rapido e semplice. Considera un'app di rotaie come esempio. Supponi di voler modificare un controller in modo da eseguire.

vim app/controllers/controller.rb

Ma poi vuoi rapidamente passare alla modifica di una vista o di una migrazione db, il mio primo istinto è :wq, tornare a bash per navigare in quella directory e ricominciare da capo in un nuovo buffer.

Questo è ovviamente completamente sbagliato.

Ho imparato diverse cose come:

  • Il client server (ma non voglio usare X su ssh e questo sembra l'unico modo)
  • :eper aprire un altro file sfogliando, ma non riesco a farlo molto rapidamente. La scheda completa mi fa davvero impazzire.
  • Apertura di un'intera directory e ricerca nei buffer.
  • NERDTree è promettente, ma voglio davvero stare lontano da qualsiasi rappresentazione grafica per continuare a forzarmi a navigare nella riga di comando

Mi scuso per essere ingenuo, ma voglio davvero imparare il modo corretto di farlo anche se è fortemente soggettivo.

Quali sono i tuoi metodi e cosa consiglieresti?


Per Ruby on Rails in particolare, il plugin rails.vim di Tim Pope ha alcuni comandi carini (con completamento; estendibile a nuove gerarchie) per l'apertura di file per modelli / viste / controller / migrazioni / test / ... (vedi rails-type-navigationnella documentazione o :help rails-type-navigationquando averlo installato).
Chris Johnsen,

Risposte:


7

È possibile configurare vim per modificare più file senza dover uscire affatto. Si utilizzano più buffer e si passa da uno all'altro. Dato che stai usando vim nella schermata, puoi abilitare quanto segue nel tuo ~ / .vimrc.

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

Questi mapping dei tasti sono associati ai tasti freccia Ctrl-Sinistra e Destra per passare da un buffer all'altro. Il tasto F4 richiama lo stesso menu visualizzato dalla GUI. Inoltre, premendo la scheda viene ora visualizzato un piccolo menu per selezionare il completamento quando si preme la scheda.


Ottimo consiglio, queste tre risposte mi hanno davvero aiutato a sentirmi più a mio agio. Una buona gestione del buffer senza plugin è una grande abilità da avere. Adoro il wildmenu!
febbraio

5

Hah! Ero esattamente come te, quindi so esattamente da dove vieni. Anche ora che so cosa sto facendo in una certa misura (non sono un dio vim, ma spero di arrivarci) Occasionalmente faccio ancora un: wq e torno alla mia shell.

Dai un'occhiata - questo potrebbe aiutarti. (Aiuterò anche me, dal momento che non l'ho mai saputo. Questo è ciò che è fantastico sui siti di stackexchange: impari aiutando gli altri ad imparare!)

Ecco alcune cose che faccio.

  1. Il :ecomando. Dall'interno di vim, quando modifichi un file, puoi fare qualcosa del genere :e dir/subdir/otherfilee lo aprirà in un nuovo buffer, il che significa che avrai due file aperti contemporaneamente.

  2. Ctrl-Shift-6(Non conosco i valori ASCII effettivi). Se hai due buffer aperti, puoi passare da uno all'altro in un lampo con questo interruttore.

  3. bd- cancellazione buffer. Consente di cancellare un buffer.

  4. Questo è davvero molto utile - :sh. Se devi tornare a una shell per qualsiasi motivo (diciamo, per guardare una directory e chmod un file), puoi invocare il comando shell di vim e fare proprio questo. Uscire dalla shell ti riporta al punto in cui ti trovavi.

  5. Nella stessa categoria della precedente, digitando :!e successivamente un comando unix eseguirà quel comando. Prova questo con ls. (Penso che funzioni anche con i builtin della shell, ma non ne sono sicuro.)

Quelli sono quelli che uso sempre. C'è anche :nper il prossimo e :pper il file precedente, dato che puoi avere più di due buffer aperti contemporaneamente in vim (di solito non lo faccio).


Fantastico grazie per questi suggerimenti. Ho anche trovato questo: wincent.com/products/command-t . Sono pronto a iniziare a usarlo. L'unico aspetto negativo è che hai bisogno di ruby ​​(non così amichevole con roba ssh), ma è esattamente quello che stavo cercando. Che combinati con :sh, :ee la gestione del buffer corretta, e le cose si fanno sexy
FEBS

Nella maggior parte delle shell (ovvero shell con controllo del lavoro) è Ctrl+Znecessario sospendere il processo ( fgdalla shell per visualizzarlo di nuovo), che è in alternativa a :sh.
maxschlepzig,

Un altro ottimo consiglio! Eccellente! Dovrò compilarli in un post sul blog o qualcosa del genere.
febbraio


2

Vorrei anche raccomandare di utilizzare le finestre divise per visualizzare più file contemporaneamente. Aggiungi alcune abilità con Gestione buffer e Window all'interno di VIM e sarai un ninja VIM in pochissimo tempo.

Per la documentazione effettiva, ti farò riferimento alla documentazione Windows di VIM , ma proverò a darti un vantaggio qui.

Inizia VIM con 2 (o più) finestre divise orizzontalmente, la finestra superiore ha file1, la finestra successiva ha file2, ecc.

vim -o <file1> <file2> (file3 file4 ...)

Inizia VIM con 2 (o più) finestre divise verticalmente, la finestra più a sinistra ha file1, la finestra successiva ha file2, ecc.

vim -O <file1> <file2> (file3 file4 ...)

Sposta il cursore su un'altra finestra:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

Già modificando un file, ma vuoi dividere la finestra e modificare anche un altro file:

:split <file2>
:vsplit <file2>

Per la divisione orizzontale e verticale rispettivamente.

Ci sono anche comandi per spostare finestre, ridimensionarle, ecc.


1

Utilizzare il comando vi: split per aprire una seconda finestra di modifica. la divisione può eseguire sia divisioni orizzontali che verticali e più di due alla volta. Ho avuto fino a 10 file aperti nella stessa sessione vi.

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.