Открытие файлов в той же папке, что и текущий файл, в vim - PullRequest
45 голосов
/ 10 ноября 2009

В vim, когда у меня открыт буфер, мне часто нужно загрузить другой файл в тот же каталог, в котором находится этот файл, но, поскольку я обычно не cd, в него pwd входит родительская папка поэтому мне приходится каждый раз повторять путь. Есть ли ярлык для этого? или способ изменить pwd на каталог, в котором находится файл?

пример:

cd /src
vi lib/foo/file.js

lib / foo имеет два файла: file.js и file2.js

в vi:

:e file2.js  # doesn't work

Ответы [ 12 ]

51 голосов
/ 31 октября 2011

: Ex сокращение от: Explore делает именно то, что вы просили.

44 голосов
/ 10 ноября 2009

На моем .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 делают то же самое, но в новой вкладке / разделенном окне.

30 голосов
/ 10 ноября 2009

Более новые версии vim имеют встроенную команду autochdir, если нет, вы можете вернуться к настройке, подобной BufEnter.

" set vim to chdir for each file
if exists('+autochdir')
    set autochdir
else
    autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /
endif
26 голосов
/ 10 ноября 2009

Простая идея - использовать настройку autochdir. Попробуйте это в вашем .vimrc:

set autochdir

Это изменит рабочий каталог vim на каталог открываемого вами файла.

Примечание: я не уверен, в какой версии добавлена ​​эта функция. Я обновил с vim 6 до 7.2, чтобы заставить это работать.

15 голосов
/ 10 ноября 2009

Попробуйте следующее:

:e %:p:h/file2.js
9 голосов
/ 10 ноября 2009

Добавьте эту строку в вашу vimrc конфигурацию

autocmd BufEnter * cd %:p:h

% текущего имени файла
: p развернуть до полного пути
: h head (последний компонент пути удален)

См. :help expand для получения дополнительной информации.

5 голосов
/ 10 ноября 2009

Решение с autochdir имеет свои подводные камни. Например, вы должны остаться в каталоге, в котором вы находитесь, потому что теги определены с относительным путем, или вам нужен Makefile или pom.xml в текущем каталоге.

Вы можете использовать

:e <C-R>%

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

nnoremap <leader>e :edit <C-R>=fnamemodify(@%, ':p:h')<CR>/

А затем, нажав \ e или , e (зависит от настроек лидера), вы получите команду, которая открывает каталог в текущим файлом, и вы можете выполнить эту команду вручную и использовать ctrl D , чтобы показать все файлы из текущего каталога файлов.

Или. Вы можете попробовать 0scan плагин.

Ключи 0 е

3 голосов
/ 10 ноября 2009

Итак, у vim есть команда: find, которая будет использовать переменную 'path'. Если у вас есть согласованные структуры каталогов для вашего кода, такие как весь исходный код в каталоге «src», то вы можете просто добавить это в переменную «path». Затем, когда вы выполните: find foo.js, он будет искать как ваше текущее местоположение, так и папки, перечисленные в вашей переменной path. Он в основном эмулирует способ, которым bash или какая-либо другая оболочка использует переменную PATH, чтобы найти соответствующий исполняемый файл.

3 голосов
/ 10 ноября 2009

Я поместил это в мой файл .vimrc, который изменит текущий каталог на файл в буфере. Это устанавливает текущий каталог для буфера и обновляется при переключении буферов.

autocmd BufEnter * lcd %:p:h
2 голосов
/ 10 ноября 2009

На передней панели быстрого доступа вы изучили команду :Sex? Это открывает файловый браузер в раскол, так что вы можете легко открыть другие файлы. :Sex по умолчанию для каталога текущего буфера. Довольно изящная особенность, если я так скажу.
Я связываю это с ;o для легкого доступа:

map ;o :Sex <CR>

Вы также можете использовать :Ex, если хотите сохранить его в текущем буфере вместо создания разделения.

...