Domanda

Ho iniziato a utilizzare Vim per sviluppare script Perl e sto iniziando a trovarlo molto potente.

Una cosa che mi piace è poter aprire più file contemporaneamente con ad es. vi main.pl maintenance.pl e poi salta tra di loro con:

:n
:prev

e vedere con quale file sono aperti

:args

E per aggiungere un file, posso dire:

:n test.pl

che mi aspetto venga quindi AGGIUNTO al mio elenco di file, ma invece cancella il mio elenco di file corrente e quando digito :args ho solo test.pl aprire.

Allora come posso AGGIUNGERE e RIMUOVERE file al mio elenco di argomenti?

È stato utile?

Soluzione

Perché non utilizzare le schede (introdotte in Vim 7)?Puoi passare da una scheda all'altra con :tabn E :tabp, Con :tabe <filepath> puoi aggiungere una nuova scheda;e con un regolare :q O :wq chiudi una scheda.Se mappi :tabn E :tabp alla tua F7/F8 tasti puoi passare facilmente da un file all'altro.

Se non ci sono molti file o non hai Vim 7 puoi anche dividere lo schermo in più file: :sp <filepath>.Quindi puoi passare da uno schermo diviso all'altro con Ctrl+W e poi un tasto freccia nella direzione in cui vuoi spostarti (o invece dei tasti freccia, w per il prossimo e W per lo schermo diviso precedente)

Altri suggerimenti

Elenco

Per visualizzare un elenco dei buffer correnti, utilizzo:

:ls

Apertura

Per aprire un nuovo file, utilizzo

:e ../myFile.pl

con completamento tramite tabulazione migliorato (put set wildmenu nel tuo .vimrc).

Nota:puoi anche usare :find che cercherà una serie di percorsi per te, ma devi prima personalizzarli.


Commutazione

Per passare da un file all'altro aperto, utilizzo

:b myfile

con completamento tramite scheda migliorato (ancora set wildmenu).

Nota: :b# sceglie l'ultimo file visitato, quindi puoi usarlo per passare rapidamente da un file all'altro.


Utilizzando finestre

Ctrl-W s E Ctrl-W v per dividere la finestra corrente orizzontalmente e verticalmente.Puoi anche usare :split E :vertical split (:sp E :vs)

Ctrl-W w per passare da una finestra aperta all'altra e Ctrl-W h (O j O k O l) per navigare tra le finestre aperte.

Ctrl-W c per chiudere la finestra corrente e Ctrl-W o per chiudere tutte le finestre tranne quella corrente.

Iniziare Vim con a -o O -O flag apre ogni file nella propria divisione.


Con tutto ciò non ho bisogno delle schede in Vim e le mie dita trovano i miei buffer, non i miei occhi.

Nota:se vuoi che tutti i file vadano nella stessa istanza di Vim, avvia Vim con il file --remote-silent opzione.

:ls

per l'elenco dei buffer aperti

  • :bp tampone precedente
  • :bn tampone successivo
  • :bn (n un numero) passa all'ennesimo buffer
  • :b <filename-part> con il tasto tab che fornisce il completamento automatico (fantastico!!)

In alcune versioni di vim, bn E bp sono in realtà bnext E bprevious rispettivamente.Il completamento automatico delle schede è utile in questo caso.

Oppure quando sei in modalità normale, usa ^ per passare all'ultimo file su cui stavi lavorando.

Inoltre, puoi salvare sessioni di vim

:mksession! ~/today.ses

Il comando precedente salva i buffer e le impostazioni dei file aperti correnti in ~/today.ses.Puoi caricare quella sessione utilizzando

vim -S ~/today.ses

Nessun problema nel ricordare dove eri rimasto ieri.;)

Per aggiungere al args elenco:

:argadd

Per eliminare dal args elenco:

:argdelete

Nel tuo esempio, potresti usare :argedit test.pl per aggiungere test.pl al file args elencare e modificare il file in un solo passaggio.

:help args fornisce molti più dettagli e un utilizzo avanzato

Utilizzo i comandi buffer - :bn (buffer successivo), :bp (buffer precedente) :buffers (elenco buffer aperti) :b<n> (buffer aperto n) :bd (elimina buffer). :e <filename> si aprirà semplicemente in un nuovo buffer.

Penso che potresti usare il comando sbagliato per guardare l'elenco dei file che hai aperto.

Prova a fare un :ls per vedere l'elenco dei file che hai aperto e vedrai:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

È quindi possibile rimbalzare tra i file facendo riferimento ad essi tramite i numeri elencati, ad es.:3b

oppure puoi dividere lo schermo inserendo il numero ma usando sb invece solo b.

Per inciso, % si riferisce al file attualmente visibile e # si riferisce al file alternativo.

È possibile alternare facilmente tra questi due file premendo Ctrl Spostare 6

Modificare:Piace :ls Puoi usare :reg per vedere il contenuto corrente dei tuoi registri, inclusi i registri 0-9 che contengono ciò che hai eliminato.Ciò è particolarmente utile se desideri riutilizzare del testo che hai precedentemente eliminato.

Vim (ma non il Vi originale!) ha delle schede che trovo (in molti contesti) superiori ai buffer.Si può dire :tabe [filename] per aprire un file in una nuova scheda.Lo spostamento tra le schede viene effettuato facendo clic sulla scheda o tramite le combinazioni di tasti [N]gt E gT.Graphical Vim ha anche schede grafiche.

Molte risposte qui!Quello che uso senza reinventare la ruota: i plugin più famosi (che non moriranno presto e sono usati da molte persone) per essere ultra veloci e geniali.

  • ctrlpvim/ctrlp.vim - per trovare il file per nome, ricerca fuzzy in base alla posizione o solo al nome
  • jlanzarotta/bufexplorer - per sfogliare i buffer aperti (quando non ricordi quanti file hai aperto e modificato di recente e non ricordi dove sono, probabilmente perché li hai cercati con Ag)
  • rking/ag.vim per cercare i file rispetto a gitignore
  • scrooloose/nerdtree per vedere la struttura delle directory, guardarsi intorno, aggiungere/eliminare/modificare file

AGGIORNAMENTO :Recentemente sto usando dyng/ctrlsf.vim per cercare con visualizzazione contestuale (come la ricerca Sublime) e ho cambiato motore da Ag A ripgrep.La prestazione è eccezionale.

Cose come :e E :badd accetterà solo UN argomento, quindi quanto segue fallirà

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Se vuoi aggiungere più file da vim, usa arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*

Quando utilizzo più file in vim, utilizzo principalmente questi comandi (con ~ 350 file aperti):

  • :b <partial filename><tab> (vai a un buffer)
  • :bw (cancellazione del buffer, rimozione di un buffer)
  • :e <file path> (modifica, apri un nuovo buffer>
  • pltags - abilitare il passaggio alle definizioni di subroutine/metodo

Alcune risposte in questo thread suggeriscono di utilizzare le schede e altre suggeriscono di utilizzare il buffer per ottenere la stessa cosa.Le schede e i buffer sono diversi.Ti consiglio vivamente di leggere questo articolo La follia di Vim Tab: buffer contro schede

Ecco un bel riassunto che ho estratto dall'articolo:

Riepilogo:

  • Un buffer è il testo in memoria di un file.
  • Una finestra è una finestra su un buffer.
  • Una scheda è una raccolta di finestre.

Potresti voler usare Segni globali Vim.

In questo modo puoi passare rapidamente da un file all'altro e persino nella posizione contrassegnata nel file.Inoltre, i comandi da tastiera sono brevi: 'C mi porta al codice con cui sto lavorando, 'T mi porta al test unitario con cui sto lavorando.

Quando cambi posto, anche reimpostare i segni è veloce: mC segna il nuovo punto di codice, mT segna il nuovo punto di prova.

Utilizzo lo stesso file .vimrc per GVim e la riga di comando vim.Tendo a utilizzare le schede in GVim e i buffer nella riga di comando vim, quindi ho configurato il mio .vimrc per semplificare il lavoro con entrambi:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Ciò blocca le mappature esistenti per H e L, ma rende il passaggio tra i file estremamente semplice e veloce.Basta premere "H" per il successivo e "L" per il precedente;sia che tu stia utilizzando schede o buffer, otterrai i risultati desiderati.

Se hai intenzione di utilizzare più buffer, penso che la cosa più importante sia quello di mettere nascosto in modo che ti permetta di cambiare buffer anche se hai cambiamenti non salvati in quello che stai lasciando.

Aggiunta di un'altra risposta poiché questa non è coperta da nessuna delle risposte

Per modificare tutti i buffer in tab visualizzazione.

 :tab sball

aprirà tutti i buffer nella visualizzazione a schede.Quindi possiamo utilizzare qualsiasi comando relativo alla scheda

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

dettagli a :help tab-page-commands.

Possiamo istruire Vim ad aprire, come visualizzazione a schede, più file vim -p file1 file2. alias vim='vim -p' sarà utile.
La stessa cosa può essere ottenuta anche inserendo il comando automatico ~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

Comunque per rispondere alla domanda:Per aggiungere all'elenco degli argomenti: arga file,

Per eliminare dall'elenco degli argomenti: argd pattern

Più a :help arglist

Il mio modo per lavorare in modo efficace con più file è utilizzare tmux.

Ti consente di dividere le finestre verticalmente e orizzontalmente, come in:

enter image description here

Funziona in questo modo sia sui miei computer Mac che su quelli Linux e lo trovo migliore del meccanismo di cambio del riquadro della finestra nativo fornito (sui Mac).Trovo che il passaggio sia più semplice e solo con tmux sono riuscito a far funzionare la "nuova pagina nella stessa directory corrente" sul mio Mac (nonostante sembrino esserci opzioni per aprire nuovi riquadri nella stessa directory) che è un pezzo sorprendentemente critico.Un nuovo riquadro istantaneo nella posizione corrente è sorprendentemente utile.Un metodo che esegua nuovi riquadri con le stesse combinazioni di tasti per entrambi i sistemi operativi è fondamentale per me e rappresenta un vantaggio per tutti per la futura compatibilità personale.Oltre a più riquadri tmux, ho anche provato a utilizzare più schede, ad es. enter image description here e più nuove finestre, ad es. enter image description here e alla fine ho scoperto che più riquadri tmux sono i più utili per me.Sono molto "visivo" e mi piace tenere i miei vari contesti proprio di fronte a me, collegati tra loro come riquadri.

tmux supporta anche i riquadri orizzontali e verticali che i più vecchi screen no (anche se iterm2 di Mac sembra supportarlo, ma ancora una volta, l'impostazione della directory corrente non ha funzionato per me).tmux 1.8

Se utilizzando solo i comandi integrati di vim, il migliore che abbia mai visto per passare da un buffer all'altro è questo:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Combina perfettamente entrambi :ls E :b comandi: elenca tutti i buffer aperti e attende l'inserimento del comando per cambiare buffer.

Data la mappatura sopra in vimrc, una volta digitato <Leader>f,

  • Vengono visualizzati tutti i buffer aperti
  • Puoi:
    • Tipo 23 per andare al buffer 23,
    • Tipo # per andare al buffer alternativo/MRU,
    • Digitare il nome parziale del file, quindi digitare <Tab>, O <C-i> per completare automaticamente,
    • O semplicemente <CR> O <Esc> per rimanere nel buffer corrente

Uno snapshot dell'output per la mappatura dei tasti sopra è:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

Nell'istantanea sopra:

  • Seconda colonna: %a per la corrente, h per nascosto, # per precedente, vuoto per non è stato cambiato.
  • Terza colonna: + per modificato.

Inoltre, lo consiglio vivamente set hidden.Vedere :help 'hidden'.

Io uso quanto segue, questo ti offre molte funzionalità che ti aspetteresti di avere in altri editor come Sublime Text / Textmate

  1. Utilizzare buffer e non "pagine a schede".I buffer hanno lo stesso concetto delle schede in quasi tutti gli altri editor.
  2. Se vuoi lo stesso aspetto delle schede puoi usare il file vim-compagnia aerea plugin con la seguente impostazione nel tuo .vimrc: let g:airline#extensions#tabline#enabled = 1.Ciò visualizza automaticamente tutti i buffer come intestazioni delle schede quando non ci sono schede aperte
  3. Usa quello di Tim Pope vim-intatto che dà [B E ]B per spostarsi rispettivamente al buffer precedente/successivo (più tutta una serie di altri gadget)
  4. Avere set wildmenu nel tuo .vimrc poi quando digiti :b <file part> + Tab per un buffer otterrai un elenco di possibili buffer che puoi scorrere utilizzando le frecce sinistra/destra
  5. Usa quello di Tim Pope ossessione per vim plugin per memorizzare sessioni che funzionano bene con la compagnia aerea (avevo molta fatica con sessioni e plugin)
  6. Usa quello di Tim Pope vim-aceto collegare.Funziona con il nativo :Explore ma rende molto più facile lavorarci.Basta digitare - per aprire l'esploratore, che è lo stesso tasto che serve per salire in una directory nell'esploratore.Rende la navigazione più veloce (tuttavia con fzf lo uso raramente)
  7. fzf (che può essere installato come plugin vim) è anche un fuzzy finder davvero potente che puoi utilizzare per cercare file (e anche buffer).anche fzf gioca molto bene con fd (una versione più veloce di find)
  8. Utilizzo Ripgrep con vim-ripgrep per cercare nella base di codice e quindi è possibile utilizzare :cdo sui risultati per eseguire la ricerca e la sostituzione

Uso molto la riga di comando e git, quindi ho questo alias nel mio bashrc:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Questo aprirà ogni nuovo file in una nuova scheda su una finestra esistente e creerà una finestra per ogni repository git.Quindi, se apri due file dal repository A e 3 file dal repository B, ti ritroverai con due finestre, una per il repository A con due schede e una per il repository B con tre schede.

Se il file che stai aprendo non è contenuto in un repository git, verrà visualizzata una finestra predefinita.

Per passare da una scheda all'altra utilizzo queste mappature:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Per aprire più file contemporaneamente dovresti combinarlo con una delle altre soluzioni.

Utilizzo più buffer impostati nascosti nel file my ~/.vimrc file.

Anche lo script mini-buffer explorer è utile per ottenere un elenco compatto dei buffer.Poi :b1 O :b2...per andare al buffer appropriato o utilizzare il mini-buffer explorer e sfogliare i buffer.

prova a seguire le mappe per modificare comodamente più file

"Finestre divise

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"muoversi

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h

ho fatto un video molto semplice mostrando il flusso di lavoro che utilizzo.Fondamentalmente utilizzo il Ctrl-P Plugin Vim e ho mappato la navigazione del buffer sul tasto Invio.

In questo modo posso premere Invio in modalità normale, guardare l'elenco dei file aperti (che appare in una nuova piccola finestra nella parte inferiore dello schermo), selezionare il file che voglio modificare e premere nuovamente Invio.Per effettuare una ricerca rapida tra più file aperti, è sufficiente digitare parte del nome del file, selezionare il file e premere Invio.

Non ho molti file aperti nel video, ma diventa incredibilmente utile quando inizi ad averne molti.

Poiché il plugin ordina i buffer utilizzando un ordinamento MRU, puoi semplicemente premere due volte Invio e passare al file più recente che stavi modificando.

Dopo aver installato il plugin, l'unica configurazione necessaria è:

nmap <CR> :CtrlPBuffer<CR>

Ovviamente puoi mapparlo su una chiave diversa, ma trovo che la mappatura da inserire sia molto comoda.

Quando ho iniziato a utilizzare VIM non mi ero reso conto che le schede avrebbero dovuto essere utilizzate come layout di finestre diverse e il buffer svolge il ruolo di modifica/scambio di file multipli tra loro.In realtà all'inizio le schede non erano nemmeno presenti prima della versione 7.0 e ho appena aperto un VIM all'interno di una scheda del terminale (al momento stavo usando gnome-terminal) e sono passato da una scheda all'altra utilizzando alt+numeri, poiché pensavo di utilizzare comandi come :buffers, :bn e :bp erano troppo per me.Quando è stato rilasciato VIM 7.0 ho trovato più semplice gestire molti file e passare ad esso, ma recentemente mi sono reso conto che i buffer dovrebbero sempre essere la strada da percorrere, a meno che una cosa:è necessario configurarlo per farlo funzionare correttamente.

Quindi ho provato vim-airline e abilitato la barra buffer visiva in alto a forma di scheda, ma la grafica aveva problemi con il mio iTerm2, quindi ne ho provati un paio e sembra che MBE funzioni meglio per me.Ho anche impostato maiuscole+h/l come scorciatoie, dato che quelle originali (spostarsi all'inizio/coda della pagina corrente) non mi sono molto utili.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Sembra essere ancora più semplice di gt e gT, e :e è anche più semplice di :tabnew.Trovo che :bd non sia conveniente come :q (MBE ha qualche problema con esso) ma penso che posso convivere con tutti i file nel buffer.

Puoi essere un pazzo assoluto e pseudonimo vim A vim -p aggiungendo il tuo .bashrc:

alias vim="vim -p"

Ciò comporterà l'apertura di più file dalla shell in schede, senza dover invocare :tab ball dall'interno di vim in seguito.

Suggerirei di utilizzare il plugin

NERDalbero

Ecco il collegamento github con le istruzioni.

Nerdtree

Utilizzo vim-plug come gestore di plugin, ma puoi usare anche Vundle.

vim-plug

Vundle

se sei su OSX e vuoi poter fare clic sulle tue schede, usa MouseTerm e SIMBL (preso da Qui).Inoltre, dai un'occhiata a questo discussione correlata.

La maggior parte delle risposte in questo thread utilizzano semplici comandi Vim, il che ovviamente va bene, ma ho pensato di fornire una risposta esauriente utilizzando una combinazione di plugin e funzioni che trovo particolarmente utili (almeno alcuni di questi suggerimenti provengono da Suggerimenti per la navigazione tra i file di Gary Bernhardt):

  1. Per alternare tra gli ultimi due file basta premere <leader> due volte.Consiglio di assegnare <leader> alla barra spaziatrice:

    nnoremap <leader><leader> <c-^>
    
  2. Per spostarsi rapidamente all'interno di un progetto la risposta è una soluzione di corrispondenza fuzzy come CtrlP.Lo lego a <leader>a per un accesso rapido.

  3. Nel caso in cui desideri vedere una rappresentazione visiva dei buffer attualmente aperti che utilizzo il plugin BufExplorer.Semplice ma efficace.

  4. Se voglio navigare nel file system, utilizzerei la riga di comando o un'utilità esterna (Quicklsilver, Afred ecc.) Ma guarderò la struttura corrente del progetto Albero NERD è un classico.Non usarlo però al posto di 2 come metodo principale di ricerca dei file.Ti rallenterà davvero.Io uso la rilegatura <leader>ff.

Questi dovrebbero essere sufficienti per trovare e aprire i file.Da lì ovviamente usa le divisioni orizzontali e verticali.Per quanto riguarda gli split trovo particolarmente utili queste funzioni:

  1. Apri nuove divisioni in aree più piccole quando non c'è abbastanza spazio ed espandile durante la navigazione.Fare riferimento Qui per commenti su cosa fanno esattamente:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. Passa facilmente da una divisione all'altra:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top