Мне очень нравится, когда мой vim меняет свой рабочий каталог на файл, над которым я сейчас работаю. Для этого я использую в своем vimrc:
autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif
Что мне также нравится, так это использование gF
(*) в vim для открытия файлов под курсором в новом буфере.
Эта комбинация, однако, вызывает проблему в моем предпочтительном рабочем процессе:
- Допустим, я хочу найти все вхождения "foo" в проекте, поэтому с моей оболочкой я
cd
к пути к папкеpath/to/project/src
и выполняю:grep -Ern 'foo' * | vim -
. Ради аргумента вывод, который открывается в vim:a/file1.c:42: foo b/file2.c:13: foo
Теперь я хочу проверить попадание в
file1
поэтому я используюgF
чтобы перейти в него. Это действие изменяет рабочий каталог наpath/to/project/src/a
Когда я возвращаюсь на вкладку с выводом
grep
рабочий каталог остается поpath/to/project/src/a
потому что%:p:h
видимому, не может найти путь для чего-то, считываемого из stdin.Проблема: теперь я не могу перейти в
file2
черезgF
так как относительный путь теперь неверен.
Было бы неплохо сделать так, чтобы vim автоматически менял свой рабочий каталог на то место, где он вызывался при переключении в буфер. В этом примере это означает, что при переключении в буфер grep
я ожидаю, что моей рабочей директорией будет path/to/project/src
.
Буду признателен за любые идеи о том, как этого добиться.
(*) Полное раскрытие: я использую spf-13 vim, но основная проблема должна относиться к vim в целом.