Как развернуть полный путь к текущему файлу для передачи в команду в Vim? - PullRequest
119 голосов
/ 10 февраля 2010

Когда я перехожу в командный режим и набираю

:!mycommand %

Я выполняю мою команду для текущего файла (% расширяется до текущего имени файла). Существует ли подобная конструкция, которая расширяет полное имя файла (с полным путем)?

Я использую Windows.

Ответы [ 6 ]

156 голосов
/ 10 февраля 2010

:!mycommand %:p

Связанный:

:!cd %:p:h

64 голосов
/ 27 июня 2012

Два других ответа у меня не сработали (по какой-то причине). Однако я обнаружил, что эта комбинация отображает полный путь при вводе в обычном режиме:

Нажмите 1 , затем Ctrl G

Источник: « Получить имя текущего файла » в Vim Tips Wiki. Смотрите также {count}CTRL-G раздел :help CTRL-G.

29 голосов
/ 10 февраля 2010

Добавить :p, например,

:!mycommand %:p

И %:p:h даст вам путь к каталогу, в котором находится файл.

9 голосов
/ 08 апреля 2016

Чтобы распечатать текущее имя файла vim:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

Например (с функцией vim), чтобы resolve() и expand() любые символические ссылки на абсолютный путь к текущему сценарию <sfile>:p (вместо %:p), а затем exec до source имя файла fnameescape, содержащееся в локальной переменной функции 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")

Примечания:

Ссылки

2 голосов
/ 22 июля 2014

Получить имя текущего файла 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

0 голосов
/ 27 марта 2014

Если вы хотите использовать полный путь в vimrc, вы можете использовать что-то вроде этого:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

Это даст вам путь с обратной косой чертой в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...