Подтвердить что ты не робот

Открытие файлов в той же папке, что и текущий файл, в 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
4b9b3361

Ответ 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> 

Это циклически выполняется через папки в рабочем каталоге.