Получение логического пути в VIM при наличии символической ссылки - PullRequest
8 голосов
/ 02 апреля 2009

У меня есть следующие настройки:

mkdir /1
mkdir /1/2
mkdir /1/2/3
ln -s /1/2/3 /1/3

Если я сделаю cd /1/3, а затем pwd, я получу /1/3. Если я использую pwd -P, я могу получить /1/2/3 или pwd -L, чтобы заставить /1/3.

В VIM я ищу способ получить /1/3.
Если я открываю файл в /1/3/foo.txt и использую что-то вроде fnamemodify(bufname(winbufnr(0)), ':p:h'), он возвращает /1/2/3.
Как я могу сказать, чтобы он дал мне ту же директорию, что и pwd?

Ответы [ 2 ]

8 голосов
/ 02 апреля 2009

Похоже, вы не можете, кроме как через system('pwd -L'). Согласно списку рассылки vim_use Vim в настоящее время автоматически разрешает символические ссылки.

См. Текст вокруг :h E773 для обоснования; если бы Vim использовал символические ссылки вместо разрешенного имени файла, можно было бы открыть один и тот же файл в двух буферах под двумя разными именами, и Vim запутался, пытаясь выяснить, где должен находиться файл подкачки. Смотрите также в :h version7.txt:

Unix: при редактировании файла через символическую ссылку файл подкачки будет использовать имя символической ссылки. Теперь используйте имя самого файла, чтобы редактировать файл обнаружен дважды.

1 голос
/ 17 июля 2014

Краткий ответ:

Возможно, вы сможете использовать привязку монтирования вместо символических ссылок. Смотри man mount.

Длинный ответ:

У меня была похожая проблема, так как у меня короткая символическая ссылка на смонтированный раздел,

/e -> /media/iam/ext4test

У меня также есть символическая ссылка ~/.vimrc -> /e/configs/.vimrc.

У меня возникли проблемы при попытке зайти в Netrw в директории с содержимым (я заходил в ~, но я не мог найти надежного способа избежать этого, учитывая желание использовать закладки и т. Д.) ,

Мое решение, после рассмотрения возможности изменения точки монтирования, заключается в том, что вы можете добавить точек монтирования. Поэтому после unlink e я использовал mount --bind /media/iam/ext4test /e.

Теперь, если я нахожусь в /e/configs/.vimrc и использую :edit . (или :e. и т. Д.), Я попаду в Netrw в директории с содержимым.

Edit:

Команда mount --bind вносит временные изменения. Для постоянного крепления я добавляю следующее к /etc/fstab,

# <file system>      <mount point>  <type>  <options>  <dump>  <pass>
/media/iam/ext4test  /e             none    bind       0       0
...