Открытие файлов в той же папке, что и текущий файл, в vim
В vim, когда у меня открыт буфер, мне часто приходится загружать другой файл в том же каталоге, в котором находится файл, но поскольку я обычно не cd
в него, pwd
является родительской папкой, поэтому я должен повторять путь каждый раз. Есть ли ярлык для этого? или способ изменить pwd на каталог, в котором находится файл?
Пример:
cd /src
vi lib/foo/file.js
lib/foo имеет два файла: file.js
и file2.js
в vi:
:e file2.js # doesn't work
Ответы
Ответ 1
В новых версиях vim есть встроенная команда autochdir, если вы не можете вернуться к настройке BufEnter.
" set vim to chdir for each file
if exists('+autochdir')
set autochdir
else
autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /
endif
Ответ 2
У меня есть следующие три строки на моем .vimrc
:
map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,t :tabe <C-R>=expand("%:p:h") . "/" <CR>
map ,s :split <C-R>=expand("%:p:h") . "/" <CR>
Теперь ,e <some-file>
открывается в этом буфере. ,t
и ,s
делают то же самое, но в новом окне вкладки/разбиения.
Ответ 3
: Ex short для: Explore делает именно то, что вы просили.
Ответ 4
Простая идея - использовать настройку autochdir. Попробуйте это в своем .vimrc:
set autochdir
Это изменит рабочий каталог vim на каталог файла, который вы открыли.
Примечание. Я не уверен, какая версия добавила эту функцию. Я обновил с vim 6 до 7.2, чтобы заставить это работать.
Ответ 5
Попробуйте следующее:
:e %:p:h/file2.js
Ответ 6
Добавьте эту строку в конфигурацию vimrc
autocmd BufEnter * cd %:p:h
% текущее имя файла
: p expand до полного пути
: h head (последний компонент пути удален)
Подробнее см. :help expand
.
Ответ 7
Решение с autochdir имеет свои ловушки. Например, вам нужно оставаться в директории, потому что теги определены с относительным путем или вам нужен Makefile или pom.xml в текущем каталоге.
Вы можете использовать
:e <C-R>%
а затем измените путь, удалив имя текущего файла и введите новый.
Или.
Используйте карту
nnoremap <leader>e :edit <C-R>=fnamemodify(@%, ':p:h')<CR>/
И затем, нажав \ e или , e (зависит от настроек лидера), вы получите команду, открывающую каталог, в котором находится текущий файл, и вы можете выполнить эту команду вручную и можете использовать ctrl D, чтобы показать все файлы из текущего каталога файлов.
Или.
Вы можете попробовать плагин 0scan.
Ключи
0 f
Ответ 8
Я поместил это в мой .vimrc файл, который изменит текущий каталог на файл в буфере. Это устанавливает текущий каталог для буфера и обновляется при переключении буферов.
autocmd BufEnter * lcd %:p:h
Ответ 9
Итак, vim имеет команду: find, которая будет использовать переменную 'path'. Если у вас есть согласованные структуры каталогов для вашего кода, такие как весь источник в каталоге "src", вы можете просто добавить это к переменной "path". Затем, когда вы выполните: find foo.js, он будет искать ваше текущее местоположение, а затем папки, перечисленные в вашей переменной пути. Он в основном эмулирует способ bash или какая-либо другая оболочка использует переменную PATH для поиска соответствующего бинарного файла.
Ответ 10
Вероятно, вы знаете, что, когда вы находитесь в vim, вы можете использовать
:cd lib/foo
чтобы перейти в lib/foo.
С другой стороны, чтобы перейти в каталог текущего файла, попробуйте
:cd %:p:h
Вы всегда можете использовать
:pwd
чтобы проверить текущий рабочий каталог.
И, конечно, если вы забыли, какой файл вы редактируете, просто нажмите ctrl-g.
Ответ 11
На лицевой панели быстрого доступа вы просмотрели команду :Sex
? Это открывает браузер файлов в виде раскола, чтобы вы могли легко открывать другие файлы. :Sex
по умолчанию - каталог текущего буфера. Довольно изящная функция, если я так говорю.
Я привязываю его к ;o
для легкого доступа:
map ;o :Sex <CR>
Вы также можете использовать :Ex
, если хотите сохранить его в текущем буфере вместо создания раскола.
Ответ 12
Другой вариант:
:e <Tab>
Это циклически выполняется через папки в рабочем каталоге.