Vervollständigung des Dateinamens relativ zur aktuell bearbeiteten Datei

7

Wenn ich eine Datei öffne, die nicht direkt in der aktuellen Datei enthalten ist und Vim zum automatischen Vervollständigen eines Dateinamens verwendet wird, stellt Vim Dateien relativ zum Speicherort bereit, an dem ich Vim gestartet habe, nicht die aktuell bearbeitete Datei.

Beispiel

$ find .
  nice-file.xml
  xml/
      messy-file.xml
      ok-file.xml
$ vim xml/messy-file.xml

Wenn ich nun Ctrl+ x, Ctrl+ feingebe, bietet Vim "nice-file.xml" als vollständige Option an. Es bietet keine ok-file.xml an, obwohl es sich im selben Verzeichnis befindet wie die Datei, die ich gerade bearbeite.

Ich möchte, dass Vim Dateinamen in Bezug auf die von mir bearbeitete Datei vervollständigt. Ist das möglich?

Scribblemacher
quelle

Antworten:

7

Sie können :cdin Vim das aktuelle Verzeichnis ändern:

:cd xml

Oder allgemeiner, wenn Sie es manchmal einstellen möchten:

nnoremap gp :cd %:p:h<CR>

Oder wenn Sie immer im Verzeichnis der aktuellen Datei sein möchten:

set autochdir

Bitte beachten Sie, dass dadurch einige Plugins beschädigt werden können, da sie möglicherweise vom aktuellen Verzeichnis abhängen, das Sie an Ort und Stelle verwenden können:

autocmd BufEnter * silent! lcd %:p:h

Wenn Sie das aktuelle Verzeichnis nicht ändern möchten, können Sie den aktuellen Ordner auch zu Ihrem Abschlusspfad hinzufügen:

autocmd BufRead *
  \ let s:tempPath=escape(escape(expand("%:p:h"), ' '), '\ ') |
  \ exec "set path+=".s:tempPath
nobe4
quelle
2
Ich erschrecke, wenn ich das wunderbar nützliche gfMapping überschreibe . Ich würde vorschlagen, etwas wie gsoder vielleicht ein <leader>Mapping zu überschreiben
Peter Rincker
Wenn ein Plugin nicht funktioniert, sollte acdes besser behoben werden. Aber diese BufEnter-Problemumgehung sollte nicht mehr erforderlich sein
Christian Brabandt
1
autochdirwar genau das, wonach ich gesucht habe. Es scheint überhaupt nicht im Widerspruch zu meiner bescheidenen Plugin-Auswahl zu stehen.
Scribblemacher