Domanda

Sto davvero cercando di imparare Vim dopo aver usato TextMate negli ultimi anni.

Ho iniziato a memorizzare parte della navigazione all'interno del file, ma ho difficoltà a navigare tra più file.

Nel mio flusso di lavoro è abbastanza comune sfogliare una manciata di file con una certa regolarità (abbastanza file in modo tale che le finestre a riquadro diviso diventino troppo piccole).

Attualmente sto utilizzando NERDTree, ma trovo complicato approfondire le directory e utilizzarlo costantemente CTRL+W H/CTRL+W l saltare avanti e indietro.

Penso che farei meglio con le schede tra cui posso facilmente alternare, ma forse ho bisogno di utilizzare un flusso di lavoro diverso.

Vorrei anche una scorciatoia "Vai al file..." come CMD+T in TextMate.ho trovato fuzzy_file_finder ma richiede che vim sia creato con i collegamenti Ruby, il che non è il caso delle installazioni native su cui ho lavorato.

Mentre io Potevo ricostruire il motivo principale per cui voglio passare a vim è che posso avere un ambiente di editor che so che funzionerà facilmente su qualsiasi piattaforma.

Le opzioni disponibili sono travolgenti e tutte le idee sono molto apprezzate!

È stato utile?

Soluzione

Non trovo che il drill-down nelle sottodirectory tramite la vecchia :e sia così ingombrante, data una buona configurazione per il completamento delle schede.

Cerca nell'opzione 'wildmenu' per fare in modo che Vim mostri un elenco di completamenti (nomi file) nella modeline sopra la riga di comando. È possibile modificare l'opzione 'wildmode' per configurare ulteriormente il tipo di completamento della scheda che Vim eseguirà.

Personalmente uso :set wildmode=full.

Il mio flusso di lavoro è così:

  1. :cd nella directory di livello superiore del mio progetto.
  2. Per aprire il file foo/bar/baz:

    • Scenario più semplice: digitare :e f<tab>b<tab>b<tab><enter>.

    • Se ci sono più file che iniziano con b in una di quelle directory potresti dover fare un <left> o <right> o un altro <tab> sulla tastiera per saltare tra di loro (o digita qualche altra lettera per chiarire le ambiguità).

    • Nel peggiore dei casi ci sono file e directory che condividono un nome ed è necessario eseguire il drill-down nella directory. In questo caso, completa il nome della directory e quindi digita *<tab> per eseguire il drill down.

  3. Apri 2 o 3 finestre e apri i file in tutte, se necessario.
  4. Una volta che un file è aperto in un buffer, non uccidere il buffer. Lascialo aperto in background quando apri nuovi file. Basta :b <tab> un nuovo file nella stessa finestra.
  5. Quindi, utilizzare :b foo<tab> per scorrere i buffer che sono già aperti in background. Se digiti foo corrisponderà solo ai file attualmente aperti che corrispondono a <=>.

Uso anche questi mapping per rendere più semplice l'apertura di nuove finestre e saltare tra loro perché è qualcosa che faccio così spesso.

" Window movements; I do this often enough to warrant using up M-arrows on this"
nnoremap <M-Right> <C-W><Right>
nnoremap <M-Left> <C-W><Left>
nnoremap <M-Up> <C-W><Up>
nnoremap <M-Down> <C-W><Down>

" Open window below instead of above"
nnoremap <C-W>N :let sb=&sb<BAR>set sb<BAR>new<BAR>let &sb=sb<CR>

" Vertical equivalent of C-w-n and C-w-N"
nnoremap <C-w>v :vnew<CR>
nnoremap <C-w>V :let spr=&spr<BAR>set nospr<BAR>vnew<BAR>let &spr=spr<CR>

" I open new windows to warrant using up C-M-arrows on this"
nmap <C-M-Up> <C-w>n
nmap <C-M-Down> <C-w>N
nmap <C-M-Right> <C-w>v
nmap <C-M-Left> <C-w>V

Mi ci vogliono pochi secondi per aprire Vim, impostare alcune finestre e aprire alcuni file al loro interno. Personalmente non ho mai trovato nessuno degli script di esplorazione dei file di terze parti molto utili.

Altri suggerimenti

Un modo semplice per sfogliare il file system è il comando:

:Sex

Non me lo sto inventando :)

:Sex, :Vex, :Tex e :Ex sono tutti comandi utili per ex (ploring) i file sul tuo sistema se vuoi usare qualcosa di diverso da :e

(dove S/V/T è l'abbreviazione di Split / Vertical / Tab)

Se non li hai già trovati, potresti voler dare un'occhiata:

  • l'originale fuzzy finder - che IIRC non ha presenta i problemi di associazione di Ruby
  • il plug-in del progetto - simile a NERDTree
  • il plugin buffer explorer - mostra un elenco di buffer aperti

Ricorda inoltre che puoi rimappare le scorciatoie da tastiera nel tuo .vimrc per renderle meno ingombranti. Uso molto le finestre divise; Ho trovato quanto segue per renderli molto più semplici:

" set your own personal modifier key to something handy
let mapleader = "," 

" use ,v to make a new vertical split, ,s for horiz, ,x to close a split
noremap <leader>v <c-w>v<c-w>l
noremap <leader>s <c-w>s<c-w>j
noremap <leader>x <c-w>c

" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

Trovo LustyExplorer il migliore finora.

Puoi aprire un file digitando solo una parte del suo nome.

È possibile aprire un file dalla directory del file corrente o dall'attuale pwd o dall'elenco dei buffer.

Se apri un file dall'elenco dei buffer, non devi navigare attraverso l'albero delle directory, anche se sfortunatamente per le altre due modalità, devi comunque navigare attraverso l'albero. La cosa buona è che non devi iniziare dal primo personaggio.

Se hai:

dir_a/
    ...
dir_b/
    file.js
    file.html

e vuoi aprire dir_b/file.html puoi trovarlo generalmente digitando b<Tab>h

  

Penso che farei meglio con le schede I   posso facilmente alternare, ma forse io   è necessario utilizzare un flusso di lavoro diverso.

Sei a conoscenza delle schede di Vim? Non sono sicuro se ti stavi riferendo alle schede di Vim lì, o se provassi per TextMate. Non è chiaro quale versione di Vim stai usando, ma ha avuto schede da almeno 7.0 (che sembra essere installato ovunque guardo di recente), e sono fantastici.

:tabe ne apre una nuova (abbreviazione di " tab edit " ;, quindi ad es. :tabe path/to/file per vuoto o gt per l'apertura di un file in una nuova scheda) è possibile spostare tra le schede adiacenti con gT / :help tabs, e ci sono anche molti altri comandi nav relativi alle schede, come ci si potrebbe aspettare da Vim (:vs)

Il mio flusso di lavoro per grandi progetti tende a coinvolgere un sacco di schede, ognuna con tra 1 e 3 finestre a seconda del tipo di contesto di cui ho bisogno. Funziona ancora meglio se ho una finestra terminale doublewide poiché posso dividere verticalmente con :sb <partial_buf_name>, quindi una singola scheda può facilmente mostrarmi 4 file contemporaneamente con molto spazio per ciascuno.

Consiglio finale: a volte uso " switch buffer " comando (:set switchbuf=usetab) che è un po 'come la scoperta fuzzy di TM, in quanto funziona abbastanza bene ma solo per buffer già aperti. Ottimo anche quando ho una dozzina o più di file aperti contemporaneamente. (N.B. Ho dovuto <=> nel mio vimrc per farlo funzionare tra le schede, ma una volta impostato è fantastico.)

Dai un'occhiata al plug-in ctrlp come alternativa al plugin Comando-T.È meglio di così in quanto è uno script Vim "nativo" e non ha bisogno che Vim sia compilato con Ruby (o altro supporto) mentre funziona molto velocemente e discretamente.

Se il file desiderato è già caricato in un buffer (il che è probabile che si stia passando regolarmente tra una manciata di file), è possibile passare rapidamente al buffer con il comando :b[uffer].

:b può prendere un numero di buffer come parametro o (più utilmente) una stringa che corrisponde a parte del percorso / nome file. Se ci sono più corrispondenze è possibile utilizzare la scheda per scorrere tra di loro.

Se vuoi dividere la finestra e aprire il buffer nella nuova finestra, usa :sb name

Se si desidera aprire il buffer in una nuova scheda, utilizzare :tab b name

Puoi anche usare il comando :ls per vedere un elenco di buffer attualmente caricati.

È sorprendente vedere che il comando :find non è stato menzionato in nessuna delle risposte. Di solito lavoro con progetti di binari in cui ho bisogno di approfondire la gerarchia di directory. Quindi per un file application.css, che si trova in app/assets/stylesheets/ tutto quello che devo digitare è :find applica e quindi premere scheda per completare automaticamente e inserire per aprire.

Uso questa funzione per trovare i file nelle sottodirectory, ma non l'ho scritto. Viene dal vim wiki :

function! Find(name) 
    let l:list=system("find . -name '".a:name."' | grep -v \".svn/\" | perl -ne 'print \"$.\\t$_\"'") 
    let l:num=strlen(substitute(l:list, "[^\n]", "", "g")) 
    if l:num 0 
            echo "Not a number" 
            return 
        endif 
        if l:inputl:num 
            echo "Out of range" 
            return 
        endif 
        let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") 
    else 
      let l:line=l:list 
    endif 
    let l:line=substitute(l:line, "^[^\t]*\t./", "", "") 
    execute ":e ".l:line 
endfunction 

command! -nargs=1 Find :call Find("") 

Una cosa che mi piace è il supporto per i caratteri jolly (*). È anche ben educato per più partite.

Oltre alle wildmenu risposte, utilizzo BufExplorer plugin e le seguenti mappature per saltare rapidamente i buffer:

nmap <A-1> :b 1<CR>
nmap <A-2> :b 2<CR>
nmap <A-3> :b 3<CR>
...
nmap <A-0> :b 10<CR>
nmap <A-=> \bs

Oppure puoi semplicemente sostituire il buffer explorer con il comando :ls, che sostanzialmente mostra la stessa cosa.

L'ultimo mappa Alt-= per mostrare il buffer explorer.

Non uso Windows così tanto, dato che generalmente ho solo una o due finestre.

Ho anche modificato statusline per includere il numero del buffer %2n, in modo che io sappia sempre quale buffer viene modificato. Vedi :h statusline

conosci l'applicazione MacVim? È lucido VIM per OS X e una delle sue funzionalità è il supporto per le schede (CMD + T per aprire una nuova scheda), ha un cassetto, ecc ... (leggi questo: http://zerokspot.com/weblog/2008/08/03/macvim-as-textmate-replacement/ )

Provalo!

Saluti Michal

NerdTree è il migliore per la navigazione di file in vim.

Il link in basso è una buona introduzione a nerdtree.

http://www.catonmat.net/blog/vim-plugins -nerdtree-vim /

Ecco qualcosa di abbastanza banale che mi attengo nel mio .vimrc. Caricherà un file da qualsiasi sottodirectory.

" load from an unspecified subdirectory 
function! LoadFromSubdirectory(filespec) 
  let filename = glob("`find . -name '" . a:filespec . "' -print`") 
  exe ':e '.filename 
endfunction 
:command -nargs=1 Er :call LoadFromSubdirectory(<f-args>) 

Quindi posso solo dire:

: Er Main.java

e cercherà nelle sottodirectory, troverà Main.java e lo caricherà. Non si comporta bene per più file con lo stesso nome, ma è semplice e veloce.

L'altro strumento che utilizzo è VTreeExplorer , che fornisce un finestra basata su albero di file / directory e non richiede alcuna speciale opzione di compilazione da VIM (ovvero è un plugin vanilla).

Il mio flusso di lavoro per la ricerca di file è wildmenu, autocwd e :e.

Parti pertinenti in .vimrc:

set wildmenu
set wildignore=*.dll,*.o,*.pyc,*.bak,*.exe,*.jpg,*.jpeg,*.png,*.gif
set wildmode=list:full
set autochdir
let g:netrw_list_hide='^\.,.\(pyc\|pyo\|o\)$'

E come usarlo:

:e myf^D

Questo fornisce tutti i file nella directory corrente che iniziano con myf. Puoi anche <Tab> tramite loro. Usa ritorna per aprire :)

^D ti darà sempre tutte le partite. Poiché autocmd va sempre nella cartella del file corrente con cui è facile lavorare. Se sei in foo/bar.py e vuoi andare a foo/baz.py fai solo :e baz.py e sei lì. Funziona anche con i buffer (:b foo^D elenca tutti i buffer che iniziano con pippo)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top