Мне очень нравится, когда мой vim меняет свой рабочий каталог на файл, над которым я сейчас работаю. Для этого я использую в своем vimrc: autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif

Что мне также нравится, так это использование gF(*) в vim для открытия файлов под курсором в новом буфере.

Эта комбинация, однако, вызывает проблему в моем предпочтительном рабочем процессе:

  1. Допустим, я хочу найти все вхождения "foo" в проекте, поэтому с моей оболочкой я cd к пути к папке path/to/project/src и выполняю: grep -Ern 'foo' * | vim - . Ради аргумента вывод, который открывается в vim: a/file1.c:42: foo b/file2.c:13: foo
  2. Теперь я хочу проверить попадание в file1 поэтому я использую gF чтобы перейти в него. Это действие изменяет рабочий каталог на path/to/project/src/a

  3. Когда я возвращаюсь на вкладку с выводом grep рабочий каталог остается по path/to/project/src/a потому что %:p:h видимому, не может найти путь для чего-то, считываемого из stdin.

  4. Проблема: теперь я не могу перейти в file2 через gF так как относительный путь теперь неверен.

Было бы неплохо сделать так, чтобы vim автоматически менял свой рабочий каталог на то место, где он вызывался при переключении в буфер. В этом примере это означает, что при переключении в буфер grep я ожидаю, что моей рабочей директорией будет path/to/project/src .

Буду признателен за любые идеи о том, как этого добиться.

(*) Полное раскрытие: я использую spf-13 vim, но основная проблема должна относиться к vim в целом.

1 ответ1

0
  • Вместо вашего :autocmd вы можете просто использовать :set autochdir в вашем ~/.vimrc . Vim имеет эту функцию, встроенную во многие версии.
  • Вместо использования grep извне, попробуйте встроенные команды :grep (или :vimgrep). Результаты будут заполнены списком быстрых исправлений ; хорошо то, что пути будут автоматически адаптироваться к изменениям в рабочем каталоге.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .