Открытие файлов в той же папке, что и текущий файл, в vim

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

пример:

cd /src
vi lib/foo/file.js

Библиотека / Foo имеет два файла:file.js а такжеfile2.js

в vi:

:e file2.js  # doesn't work

Ответы на вопрос(11)

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

У меня есть следующие три строки на моем:.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>
</cr></c-r></cr></c-r></cr></c-r>

Сейчас,e  открывается в этом буфере.,t а также,s сделать то же самое, но на новой вкладке / разделить окно.

 hgmnz11 нояб. 2009 г., 16:28
Согласен с тобой. Кроме того, если мне никогда не придется менять каталог,всегда:cd %:h
 gerrard0029 нояб. 2018 г., 05:48
Я использовал это в течение двух дней, и яЯ не уверен, как я работал без него. Отличный совет.
 Eric Douglas05 авг. 2015 г., 21:49
Большое спасибо за это решение! Это работает потрясающе!
 nelstrom11 нояб. 2009 г., 12:29
Это мое любимое решение, опубликованное здесь. Я неМне нравится идея смены каталога текущего файла автоматически. Я предпочитаю открывать vim в корневом каталоге проекта, а это значит, что:e всегда сверлится сверху вниз. До сих пор, если бы я хотел открыть файл в том же каталоге, что и текущий файл, я бы использовал:E который вызывает файловый менеджер netrw. Используя ваш,e картография чувствует себя намного быстрее. Это'Замечательно, как вы можете просматривать файлы в текущем каталоге.

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

autocmd BufEnter * cd %:p:h

% текущего имени файла

: p развернуть на полный путь

: h head (последний компонент пути удален)

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

 jamessan10 нояб. 2009 г., 18:17
Просто имейте в виду, что эта функциональность может сломать плагины, как отмечено в:Помогите 'autochdir».
 cloudhead10 нояб. 2009 г., 17:51
спасибо за дополнительную информацию.
 user15667610 нояб. 2009 г., 16:24
Этот сайт мне очень помогает при поиске vim-материала:rayninfo.co.uk/vimtips.html
 cloudhead10 нояб. 2009 г., 16:22
Это прекрасно работает, спасибо. Теперь, чтобы узнать, что это%:p:h средства :)

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

Я связываю это с;o для легкого доступа:

map ;o :Sex <cr>
</cr>

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

 Jack M.10 нояб. 2009 г., 16:44
О, это:Ex, Я'Я влюблен в сплиты, поэтому я так думаю. Я'отредактирую ответ за это.
 cowlicks13 янв. 2016 г., 23:57
Извините, если это слишком педантично, но я думаю, что вывсе значит "окно" не "Панель».
 cloudhead10 нояб. 2009 г., 16:22
классно. Хотелось бы, чтобы файл открылся в другой панели!
 cloudhead10 нояб. 2009 г., 18:26
хе-хе, я знаю, что я имел в виду, чтобы сохранить разделение, но когда вы открываете файл, он открывает его в другой панели, а не в списке файлов.

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

autocmd BufEnter * lcd %:p:h
 cloudhead10 нояб. 2009 г., 16:24
RCS побил тебя к этому!
Решение Вопроса

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

" set vim to chdir for each file
if exists('+autochdir')
    set autochdir
else
    autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /
endif
 trim15 июл. 2015 г., 19:16
Если ты'собираюсь сделать это, то почему бы простоcd в этот каталог в первую очередь, прежде чем открывать файл. Oни'оба одинаково ограничивают доступ к другим каталогам после открытия файла? Решение @hgmnz ниже гораздо элегантнее и гибкий.

:e <tab> 
</tab>

Это перебирает папки в вашем рабочем каталоге.

 cloudhead10 нояб. 2009 г., 16:13
Это победилоне работает, потому что мой рабочий каталог неодин файл, который ям редактирование в.

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

:e %:p:h/file2.js
 eMBee23 дек. 2016 г., 18:11
это самый короткий ответ с самым общим решением. узнавать о%:p:h/ в качестве ярлыка для текущего пути, помогает применить его к любой другой ситуации, где текущий путь может быть необходим, например,:r:w...
 amit28 мая 2018 г., 13:04
:sp %:h/file2.js тоже похоже на работу. В качестве альтернативы можно сделать:sp % и затем отредактируйте имя файла по мере необходимости.

:cd lib/foo

перейти на lib / foo.

С другой стороны, чтобы перейти в каталог файла, который выВы редактируете сейчас, попробуйте

:cd %:p:h

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

:pwd

чтобы проверить ваш текущий рабочий каталог.

И, конечно, если вы забыли, какой файл выдля редактирования, просто нажмите Ctrl-G.

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

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

:e <c-r>%
</c-r>

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

nnoremap <leader>e :edit <c-r>=fnamemodify(@%, ':p:h')<cr>/
</cr></c-r></leader>

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

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

Ключи 0f

 dash-tom-bang04 сент. 2010 г., 01:44
Теги можно найтирекурсивно», У нас есть наши теги в папке _tags / в корневом каталоге.set tags=_tags/tags;c:/work средства "идти вверх, пока не найдете что-то подходящее_tags/tags, но остановитесь, если вы нажметеc:/work, Так что если яm редактирование c: /work/project/main/src/lib/subdir/file.c (из этого файла 's каталог) он все еще может найти мой файл тегов c: / work / project / main / _tags / tags

м .vimrc:

set autochdir

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

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

 cloudhead10 нояб. 2009 г., 18:24
по какой-то причине это неработать на меня, на7.2.108
 Cam16 июн. 2016 г., 19:40
Это жизнь меняется.
 dash-tom-bang04 сент. 2010 г., 01:47
autochdir также является проблемой, потому что он переключает каталоги перед попыткой загрузки файла, поэтому, если вы делаете это в командной строкеgvim path/to/file.c Это'Перейдите в path / to и затем попытайтесь открыть path / to / file.c, что даст вам пустой буфер в несуществующем месте. :( (64-битный 7.2 на Windows, так или иначе.)
 jamessan10 нояб. 2009 г., 19:13
Это'Доступно, только если Vim был создан с интеграцией NetBeans или Sun Visual Workshop. Первый чаще встречается, чем второй, но этоНет ничего необычного в том, чтобы не иметь встроенных. Вот почему ГрегфОтветы на тесты на наличие работающегоautochdir» вариант.

Ваш ответ на вопрос