Является ли опция Vim по умолчанию 'path' избыточной?

10

Из справочного документа Вима (см . :help 'path':):

'path' String (по умолчанию в Unix: " .,/usr/include,,")

-Для поиска относительно каталога текущего файла используйте:

:set path=.

-Для поиска в текущем каталоге используйте пустую строку между двумя запятыми:

:set path=,,

Кажется, что .и ,,нет никакой разницы в «пути» вариант. Они оба означают текущий каталог.

Я не могу понять, почему мы должны поставить оба варианта .и ,,путь. В чем разница между :set path=.и :set path=,,?

Фен ю
источник

Ответы:

14

«Текущий каталог» и «каталог текущего файла» - это две разные вещи.

«Текущий каталог» по умолчанию является каталогом, в котором вы запустили Vim. Вы спрашиваете Vim, что это такое, :pwdи меняете его с помощью :cdили :lcdили, устанавливая autochdirопцию. Если вы никогда не измените его, он останется прежним, пока вы не закроете текущий сеанс.

«Каталог текущего файла» - это именно то, что он утверждает. Если текущий файл находится в «текущем каталоге», оба имеют одинаковое значение. Если текущий файл находится в другом каталоге, они имеют разные значения.

Чтобы pathбыть полезными, необходимо обратиться к этим двум сценариям с помощью .и ,,.

Пример:

$ 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
romainl
источник
7

Каталог текущего файла и текущего каталога две совершенно разные вещи (которые могут, в некоторых случаях, имеют то же значение).

Рассматривать:

cd /tmp; vim /etc/bash.bashrc

Если у меня не установлен autochdir(или что-то подобное), текущий каталог /tmp, но каталог текущего файла /etc.

Мур
источник