it-swarm.com.de

Vim-Datei-Navigation

Ich bin sehr bemüht, vim zu lernen, nachdem ich TextMate in den letzten Jahren verwendet habe.

Ich habe angefangen, einen Teil der Navigation in der Datei in den Speicher zu schreiben, aber ich habe Schwierigkeiten, zwischen mehreren Dateien zu navigieren.

In meinem Workflow ist es ziemlich häufig, dass ich regelmäßig zwischen einer Handvoll Dateien wechsle (genug Dateien, sodass Fenster mit geteiltem Fensterbereich zu klein werden).

Ich verwende derzeit NERDTree, finde aber das Aufsuchen von Verzeichnissen sowohl umständlich als auch ständig CTRL+Wh/CTRL+Wl hin und her hüpfen.

Ich denke, ich würde es besser mit Registerkarten machen, zwischen denen ich leicht wechseln kann, aber möglicherweise muss ich einen anderen Workflow verwenden.

Ich möchte auch eine Verknüpfung "Gehe zu Datei ..." CMD+T in TextMate. Ich habe fuzzy_file_Finder gefunden, aber dafür muss vim mit Ruby-Bindungen erstellt werden, was bei den nativen Installationen, an denen ich gearbeitet habe, nicht der Fall ist.

Obwohl ich den Hauptgrund, warum ich zu vim wechseln möchte, neu erstellen konnte , kann ich eine Editorumgebung haben, von der ich weiß, dass sie problemlos auf jeder Plattform funktioniert.

Die Möglichkeiten da draußen sind überwältigend. Ideen werden sehr geschätzt!

77
Pete

Ich finde Drilldown in Unterverzeichnisse über den einfachen alten :e nicht als unhandlich, wenn man eine anständige Konfiguration für die Tab-Vervollständigung vornimmt.

Sehen Sie sich die 'wildmenu'-Option an, damit Vim eine Liste von Vervollständigungen (Dateinamen) in der Modeline oberhalb der Befehlszeile anzeigt. Sie können die 'wildmode'-Option ändern, um die Art der Tab-Vervollständigung zu konfigurieren, die Vim durchführen wird. 

Persönlich verwende ich :set wildmode=full.

Mein Workflow ist wie folgt:

  1. :cd in das Verzeichnis der obersten Ebene meines Projekts.
  2. So öffnen Sie die Datei foo/bar/baz:

    • Einfachstes Szenario: Geben Sie :e f<tab>b<tab>b<tab><enter> ein.

    • Wenn in einem dieser Verzeichnisse mehr als eine Datei mit b beginnt, müssen Sie möglicherweise einen <left> oder <right> oder einen anderen <tab> auf der Tastatur eingeben, um zwischen ihnen zu wechseln (oder geben Sie ein paar weitere Buchstaben ein, um die Unterscheidung zu erleichtern).

    • Im schlimmsten Fall gibt es Dateien und Verzeichnisse, die einen Namen gemeinsam nutzen, und Sie müssen das Verzeichnis detailliert darstellen. In diesem Fall vervollständigen Sie den Verzeichnisnamen mit Tabulator und geben Sie *<tab> ein, um einen Drilldown durchzuführen.

  3. Öffnen Sie 2 oder 3 Fenster und öffnen Sie bei Bedarf Dateien in allen Fenstern.
  4. Wenn eine Datei in einem Puffer geöffnet ist, beenden Sie den Puffer nicht. Lassen Sie es beim Öffnen neuer Dateien im Hintergrund geöffnet. Einfach :e eine neue Datei in demselben Fenster.
  5. Verwenden Sie dann :b <tab>, um durch Puffer zu blättern, die bereits im Hintergrund geöffnet sind. Wenn Sie :b foo<tab> eingeben, stimmt dies nur mit aktuell geöffneten Dateien überein, die mit foo übereinstimmen.

Ich verwende diese Zuordnungen auch, um das Öffnen von neuen Fenstern zu vereinfachen und zwischen ihnen zu wechseln, da ich dies so oft mache.

" 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

Ich brauche nur ein paar Sekunden, um Vim zu öffnen, einige Fenster einzurichten und ein paar Dateien darin zu öffnen. Persönlich habe ich nie eines der Dateisuch-Skripte von Drittanbietern als sehr nützlich empfunden.

79
Brian Carper

Ein einfacher Weg, um das Dateisystem zu durchsuchen ist der Befehl: 

:Sex

Ich mache mir das nicht aus :)

219
user286754

:Sex, :Vex, :Tex und :Ex sind nützliche Befehle, um die Dateien auf Ihrem System zu explplizieren, wenn Sie etwas anderes als :e verwenden möchten

(wobei S/V/T für Split/Vertical/Tab steht)

34
Emil Rehhnberg

Wenn Sie sie noch nicht gefunden haben, möchten Sie vielleicht folgendes ausprobieren:

  • das ursprüngliche fuzzy Finder plugin - das IIRC nicht mit Ruby-Bindungsproblemen hat
  • das Project-Plugin - ähnlich wie NERDTree
  • das Buffer Explorer Plugin - zeigt eine Liste der offenen Puffer

Denken Sie auch daran, dass Sie Tastenkombinationen in Ihrem .vimrc neu zuordnen können, um sie weniger umständlich zu machen. Ich verwende häufig geteilte Fenster. Ich habe festgestellt, dass der Umgang mit ihnen viel einfacher ist:

" 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
6
dlimeb

Ich finde LustyExplorer das Beste bisher.

Sie können eine Datei öffnen, indem Sie nur einen Teil ihres Namens eingeben.

Sie können eine Datei aus dem Verzeichnis der aktuellen Datei oder dem aktuellen pwd oder aus der Pufferliste öffnen.

Wenn Sie eine Datei aus der Pufferliste öffnen, müssen Sie nicht durch die Verzeichnisstruktur navigieren. In den beiden anderen Modi müssen Sie jedoch leider durch die Baumstruktur navigieren. Das Gute ist, dass Sie nicht mit dem ersten Buchstaben beginnen müssen. 

Wenn Sie haben:

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

sie möchten dir_b/file.html öffnen, indem Sie b<Tab>h eingeben.

5
hasen

Ich denke, ich würde es besser machen, wenn ich kann leicht zwischen, aber vielleicht ich .__ wechseln. Sie müssen einen anderen Workflow verwenden.

Kennen Sie die Registerkarten von Vim? Nicht sicher, ob Sie sich auf Vims eigene Registerkarten oder auf TextMates beziehen. Es ist unklar, welche Vim-Version Sie verwenden, aber es hat seit mindestens 7.0 Registerkarten (die anscheinend überall installiert werden, wo ich in letzter Zeit aussieht), und sie sind fantastisch.

:tabe öffnet eine neue (Abkürzung für "Tab edit"), dh :tabe für leer oder :tabe path/to/file zum Öffnen einer Datei in einem neuen Tab. Sie können mit gt/gT zwischen benachbarten Registerkarten wechseln, und es gibt noch eine Reihe weiterer Registerkarten auch Nav-Befehle, wie Sie es von Vim erwarten (:help tabs)

Mein Workflow für große Projekte umfasst in der Regel eine Reihe von Registerkarten mit jeweils 1 bis 3 Fenstern, je nachdem, welchen Kontext ich benötige. Dies funktioniert sogar noch besser, wenn ich ein doppelt breites Terminalfenster habe, da ich mit :vs vertikal teilen kann. Auf einem einzigen Tab können dann problemlos 4 Dateien mit viel Speicherplatz angezeigt werden.

Abschließend noch ein Tipp: Ich verwende manchmal den Befehl "switch buffer" (:sb <partial_buf_name>), der wie TMs Fuzzy-Finding aussieht, da er ziemlich gut funktioniert, jedoch nur für bereits geöffnete Puffer. Immer noch gut, wenn ich ein Dutzend oder mehr Dateien gleichzeitig geöffnet habe. (Hinweis: Ich musste :set switchbuf=usetab in meinem vimrc eingeben, damit dies über Registerkarten funktioniert, aber wenn das einmal eingestellt ist, ist es großartig.)

4
bitprophet

Überprüfen Sie das Plugin ctrlp als Alternative zum Plugin Command-T . Es ist besser als dies, da es ein "natives" Vim-Skript ist und nicht benötigt wird, dass Vim mit Ruby (oder anderer Unterstützung) kompiliert wird, während es sehr schnell und unauffällig läuft. 

3
nikola

Es ist überraschend, dass der Befehl :find in keiner der Antworten erwähnt wurde. Normalerweise arbeite ich mit Rails-Projekten, bei denen ich tief in die Verzeichnishierarchie eingreifen muss. Für eine Datei application.css, die sich in app/assets/stylesheets/ befindet, muss ich nur :find applica eingeben und dann tab drücken, um die automatische Vervollständigung durchzuführen und enter , um sie zu öffnen. 

2
Imran Ali

Wenn die gewünschte Datei bereits in einen Puffer geladen ist (was wahrscheinlich ist, wenn Sie regelmäßig zwischen einer Handvoll Dateien wechseln), können Sie mit dem Befehl :b[uffer] schnell zum Puffer wechseln. 

:b kann entweder eine Puffernummer als Parameter oder (sinnvoller) eine Zeichenfolge verwenden, die zu Teil des Pfads/Dateinamens passt. Wenn mehrere Übereinstimmungen vorhanden sind, können Sie die Tabulatoren verwenden, um sie durchzublättern. 

Wenn Sie das Fenster teilen und den Puffer im neuen Fenster öffnen möchten, verwenden Sie :sb name.

Wenn Sie den Puffer in einer neuen Registerkarte öffnen möchten, verwenden Sie :tab b name

Sie können den Befehl :ls auch verwenden, um eine Liste der aktuell geladenen Puffer anzuzeigen.

2
Dave Kirby

kennst du die MacVim-Anwendung? Es ist VIM für OS X poliert, und eines seiner Features ist die Unterstützung von Registerkarten (CMD + T, um neue Registerkarten zu öffnen), es hat eine Schublade usw. (lesen Sie dies: http: // zerokspot .com/weblog/2008/08/03/macvim-as-textmate-replacement/ )

Versuch es!

Grüße Michal 

1
msgre

NerdTree eignet sich am besten für die Navigation in vim. 

Der Link unten ist eine gute Einführung in Nerdtree.

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

1
xinghua

Ich benutze diese Funktion, um Dateien in Unterverzeichnissen zu finden. Ich habe sie jedoch nicht geschrieben. Es ist aus dem vim Wiki :

Funktion! Find (Name) 
 let l: list = system ("find. -name '" .a: name. "" | grep -v\". svn/\" | Perl -ne' print\"$. \\ t $ _ \" ") 
 l sei l: num = strlen (ersetze (l: liste, "[^\n]", "", "g")) 
 wenn l: num 0 
 echo "Keine Nummer" 
 Rückkehr 
 endif 
 wenn l: inputl: num 
 Echo "Außer Reichweite" 
 Rückkehr 
 endif 
 let l: line = matchstr ("\ n" .l: list, "\ n" .l: input. "\ t [^\n] *") 
 sonst 
 lassen Sie l: line = l: liste 
 endif 
 l: l = line = ersetzen (l: line, "^ [^\t] *\t. /", "", "") 
 Führen Sie ": e" .l: Zeile 
 Endfunktion 

 Befehl aus! -nargs = 1 Find: Aufruf Find ("") 

Eine Sache, die ich mag, ist die Unterstützung von Platzhaltern (*). Es ist auch gut für mehrere Spiele benommen.

1

Zusätzlich zu den wildmenu-Antworten benutze ich BufExplorer plugin und die folgenden Zuordnungen, um schnell Puffer zu springen:

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

Oder Sie können den Puffer-Explorer einfach durch den Befehl :ls ersetzen, der im Grunde dasselbe anzeigt.

Der letzte bildet den Alt-= ab, um den Puffer-Explorer anzuzeigen.

Ich benutze Windows nicht so oft, da ich normalerweise nur ein oder zwei Fenster habe.

Ich änderte auch die Variable statusline, um die Puffernummer %2n aufzunehmen, damit ich immer weiß, welcher Puffer bearbeitet wird. Siehe :h statusline

1
Ayman

Hier ist etwas ziemlich Triviales, das ich in meinen .vimrc stecke. Es wird eine Datei aus einem beliebigen Unterverzeichnis geladen.

" 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>) 

Also kann ich nur sagen:

: Er Main.Java

und es wird Unterverzeichnisse durchsuchen, Main.Java finden und laden. Es verhält sich nicht gut für mehrere Dateien mit demselben Namen, aber es ist schnell und einfach.

Das andere Werkzeug, das ich verwende, ist VTreeExplorer , das ein baumbasiertes Fenster mit Dateien/Verzeichnissen bereitstellt und keine speziellen Build-Optionen von VIM erfordert (d. H. Es ist ein Vanilla-Plugin).

0
Brian Agnew

Mein Arbeitsablauf zum Finden von Dateien ist das Wildmenü, autocwd und :e.

Relevante Teile im .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\)$'

Und wie man es benutzt:

:e myf^D

Das gibt alle Dateien im aktuellen Verzeichnis an, die mit myf beginnen. Sie können auch <Tab> durchlaufen. Verwenden Sie zurück, um zu öffnen :)

^D gibt Ihnen immer alle Übereinstimmungen. Da autocmd immer in den Ordner der aktuellen Datei geht, ist es einfach, damit zu arbeiten. Wenn Sie sich in foo/bar.py befinden und zu foo/baz.py gehen möchten, müssen Sie nur :e baz.py und Sie sind dort. Das funktioniert auch mit Puffern (:b foo^D listet alle Puffer auf, die mit foo beginnen)

0
Armin Ronacher