Ist die Standardoption "Pfad" von Vim redundant?


10

Aus dem Hilfedokument von Vim (siehe :) :help 'path':

'path' String (Standard unter Unix: " .,/usr/include,,")

- Um relativ zum Verzeichnis der aktuellen Datei zu suchen, verwenden Sie:

:set path=.

- Um im aktuellen Verzeichnis zu suchen, verwenden Sie eine leere Zeichenfolge zwischen zwei Kommas:

:set path=,,

Es scheint so .und ,,hat keinen Unterschied in der Option "Pfad". Sie bedeuten beide das aktuelle Verzeichnis.

Ich kann nicht verstehen, warum wir beide .und ,,die Pfadoption setzen müssen. Was ist der Unterschied zwischen :set path=.und :set path=,,?

Antworten:


14

"Aktuelles Verzeichnis" und "Verzeichnis der aktuellen Datei" sind zwei verschiedene Dinge.

Das "aktuelle Verzeichnis" ist standardmäßig das Verzeichnis, in dem Sie Vim gestartet haben. Sie fragen Vim, worum es geht, :pwdund ändern es mit :cdoder :lcdoder durch Festlegen der autochdirOption. Wenn Sie es nie ändern, bleibt es gleich, bis Sie die aktuelle Sitzung schließen.

Das "Verzeichnis der aktuellen Datei" ist genau das, was es zu sein behauptet. Befindet sich die aktuelle Datei im "aktuellen Verzeichnis", haben beide den gleichen Wert. Wenn sich die aktuelle Datei in einem anderen Verzeichnis befindet, haben sie unterschiedliche Werte.

Um pathnützlich zu sein, müssen diese beiden Szenarien mit .und behandelt werden ,,.

Beispiel:

$ cd /foo/bar/baz
$ vim filename
:pwd                   -->  /foo/bar/baz
:echo expand("%:p:h")  -->  /foo/bar/baz
:e ../file
:pwd                   -->  /foo/bar/baz
:echo expand("%:p:h")  -->  /foo/bar

7

Das Verzeichnis der aktuellen Datei und das aktuelle Verzeichnis sind zwei völlig verschiedene Dinge (die gelegentlich den gleichen Wert haben können).

Erwägen:

cd /tmp; vim /etc/bash.bashrc

Sofern ich nicht autochdir(oder etwas Ähnliches) festgelegt habe, ist das aktuelle Verzeichnis /tmpdas Verzeichnis der aktuellen Datei /etc.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.