Как я могу расширить полный путь к текущему файлу, чтобы передать его команде в Vim?
123
Когда я перехожу в командный режим и набираю
:!mycommand %
Моя команда выполняется в текущем файле ( %расширяется до имени текущего файла). Есть ли аналогичная конструкция, расширяющая полное имя файла (с полным путем)?
чтобы получить каталог, содержащий текущий файл, я думаю, что%: h достаточно. Зачем здесь%: p: h?
HVNSweeting
1
@HVNSweeting :%p- это абсолютный путь к файлу, а не относительный путь. :%p%h- абсолютный путь к родительскому каталогу файла. Использование только %:hможет привести к относительному пути.
Анника Бэкстрем
2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim:, :!echo %:hдолжен отображать '.' для относительного пути.
Анника Бэкстрем
65
Два других ответа у меня не сработали (по какой-то причине). Однако я обнаружил, что эта комбинация отображает полный путь при вводе в нормальном режиме:
Это другая тема. Вопрос заключается в том, чтобы включить буферный путь в командную строку (т.е. ведущую :!). Ваша {count}CTRL-Gпоследовательность предназначена для отображения полного пути в пользовательском интерфейсе.
Стефан Маевски
3
@StefanMajewsky относительно заголовка вопроса, который на самом деле привел меня сюда, это должен быть выбранный ответ.
doc_id 02
29
Добавить :p, например
:!mycommand %:p
И %:p:hдаст вам путь к каталогу, в котором находится файл.
Например (с функцией VIM), чтобы resolve()и expand()любые символические ссылки на абсолютный путь к текущему сценарию <sfile>:p(вместо %:p), а затем , execчтобы sourceв fnameescape-ED файла содержится в функции локальной переменной ВИМ l:vimrcfilename:
" g:__sfile__dirname -- directory containing this vimrc script
" after symlinks
" ~dirname(abspath(realpath(__file__)))
let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")
" Source_dotvim(filename) -- source dirname(this_vimrc)/filename
function Source_dotvim(filename)
let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
"source s:vimrcfilename "this doesn't work, so exec:
exec "source " . fnameescape(l:vimrcfilename)
else
echo l:vimrcfilename . " empty or not found."
endif
endfunction
call Source_dotvim("vimrc.local.01-env.vimrc")
Ответы:
:!mycommand %:p
Связанный:
:!cd %:p:h
источник
:help filename-modifiers
:%p
- это абсолютный путь к файлу, а не относительный путь.:%p%h
- абсолютный путь к родительскому каталогу файла. Использование только%:h
может привести к относительному пути.cd ~ ; vim .vimrc
Vim:,:!echo %:h
должен отображать '.' для относительного пути.Два других ответа у меня не сработали (по какой-то причине). Однако я обнаружил, что эта комбинация отображает полный путь при вводе в нормальном режиме:
Нажмите 1затемCtrlG
Источник: « Получить имя текущего файла » на вики-странице «Советы по Vim». См. Также
{count}CTRL-G
раздел:help CTRL-G
.источник
:!
). Ваша{count}CTRL-G
последовательность предназначена для отображения полного пути в пользовательском интерфейсе.Добавить
:p
, напримерИ
%:p:h
даст вам путь к каталогу, в котором находится файл.источник
Чтобы распечатать текущее имя файла vim:
Например (с функцией VIM), чтобы
resolve()
иexpand()
любые символические ссылки на абсолютный путь к текущему сценарию<sfile>:p
(вместо%:p
), а затем ,exec
чтобыsource
вfnameescape
-ED файла содержится в функции локальной переменной ВИМl:vimrcfilename
:Ноты:
:help fnamemodify
%:p
(файл буфера) /<sfile>:p
(файл сценария)expand('<sfile>')
не работает изнутри функцииl:varname
не работает; Итак,exec
- конкатенация строк - иfnameescape
:messages
печатает 200 последних сообщений vim [error,]Ссылки
источник
Получить имя текущего файла http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
Set_working_directory_to_the_current_file http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file
источник
Если вы хотите использовать полный путь в своем
vimrc
, вы можете использовать что-то вроде этого:Это даст вам путь с обратной косой чертой в Windows.
источник