Как установить рабочий / текущий каталог в Vim?

109

Поэтому, когда я хочу создать новый файл с помощью команды: e, я не хочу указывать весь путь, только новое имя файла. Это можно сделать?

Фред
источник

Ответы:

144

Как уже было предложено, вы можете использовать autochdir, который перейдет в каталог открытого вами файла, другой вариант -

:cd mydirectory

который изменит каталог. Это может быть абсолютный или относительный путь, поэтому он :cd ..будет перемещаться на один уровень вверх. Или вы можете использовать, :cd %:hкоторый также изменит каталог, в котором находится текущий файл, но без установки autochdir.

:cd

сменит каталог на ваш домашний каталог (или в Windows распечатает текущий каталог).

:cd -

изменит каталог на предыдущий каталог, который вы посетили.

фальстро
источник
13
если вы используете несколько окон, вы даже можете использовать: lcd для изменения каталога только для текущего окна.
Бесполезный
1
@ Бесполезно: интересно ... Не думаю, что когда-нибудь захочу этого, но полагаю, это дело вкуса. Спасибо за информацию.
falstro
3
Я пытаюсь понять, что означает%: h, помощь?
Michael
10
@Michael %переводит имя текущего файла, включая путь, :добавляет модификатор, hявляется заголовком , то есть путь до последнего разделителя пути, который исключает само имя файла.
falstro
@falstro, знаете ли вы, как: команда cd может применяться ко всем окнам в пределах одного запущенного экземпляра vim? Пример: при использовании split: sp
mgouin
15

Также, если вы просматриваете файловую систему с помощью проводника файлов netrw, вы можете установить текущий каталог, нажав клавишу c.

Дэйв Кирби
источник
также используйте, set autochdirчтобы 'c' keyэффект вступил в силу в оболочке, чтобы вы могли использовать его !command args в измененном каталоге.
pimgeek 01
9

Попробуйте добавить set autochdirв свой .vimrc. Если вы хотите изменить его только один раз, используйте :cd(или :cd!принудительно).

Джон Феминелла
источник
1
в справке говорится, что это нарушает работу некоторых плагинов (я не знаю, какие из них), поэтому я принял меры предосторожности, добавив отображение в свой .vimrc: cnoremap cd. lcd %:p:hи nnoremap ,cd :cd %:p:h<CR>:pwd<CR>вместо этого
ErichBSchulz
также используйте 'c' keyв проводнике файлов netrw для сопровождения этого.
pimgeek 01
3

Я не знаю, что не так с vim. Мне нужен каталог, в котором я запускаю vim как текущий.

Я последовал совету об autochd выше и установил для него значение noautcd в моем .vimrc.

Я еще не сделал этого, но с этого момента я собираюсь запустить vim следующим образом:

vim —cmd 'cd `pwd`'

Это заставит его оставаться в текущем каталоге!

McUsr
источник
2

С netrw:в дополнении к нажатию cкнопки для установки текущего каталога, вы можете также поместить:

let g:netrw_keepdir= 0

в вашем .vimrc; это означает, что netrwкаталог просмотра останется таким же, как текущий каталог.

Чип Кэмпбелл
источник
Кажется, что это имеет эквивалентное поведение, как: lcd для каждого изменения папки netrw. У вас есть идея, как этот параметр может быть эквивалентен вместо: cd (изменить каталог для всех окон)? Спасибо!
mgouin
1

Добавление этого в мой .vimrcавтоматически изменяет рабочий каталог Vim на текущий файл:

autocmd BufEnter * silent! :lcd%:p:h
Маттиас Браун
источник
3
set autochdirделает то же
самое