Як я можу розгорнути повний шлях поточного файлу, щоб перейти до команди у Vim?


123

Коли я переходжу до командного режиму та набираю

:!mycommand %

Я отримую свою команду, що виконується на поточному файлі ( %розширюється до поточного імені файлу). Чи існує подібна конструкція, яка розширює повне ім’я файлу (з повним контуром)?

Я використовую Windows.



:! mycommand "%"
SdidS

Відповіді:


161

:!mycommand %:p

Пов'язані:

:!cd %:p:h


23
Як ви знаходите їх у довідці VIM?
кефлавич

57
@keflavich:help filename-modifiers
Annika Backstrom

щоб отримати каталог, який містить поточний файл, я думаю, що%: h достатньо. Навіщо потрібно%: p: h тут?
HVNSweeting

1
@HVNSweeting :%p- це абсолютний шлях до файлу, а не відносний шлях. :%p%h- абсолютний шлях до батьківського каталогу файлу. Використання просто %:hможе призвести до відносного шляху.
Annika Backstrom

2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim:, :!echo %:hповинен відображати '.' для відносного шляху.
Annika Backstrom

65

Інші два відповіді не спрацювали для мене (чомусь). Однак я виявив, що це комбо відображає повний шлях при введенні в звичайному режимі:

Натисніть 1потімCtrlG

Джерело: " Отримайте ім'я поточного файлу " у Вікі Tips Wiki. Дивіться також {count}CTRL-Gрозділ :help CTRL-G.


5
Це вже інша тема. Питання полягає в тому, щоб включити шлях до буфера в командний рядок (таким чином, провідний :!). Ваша {count}CTRL-Gпослідовність призначена для відображення повного шляху в інтерфейсі користувача.
Стефан Маєвський

3
@StefanMajewsky щодо назви питання, яка насправді привела мене сюди, це має бути обраною відповіддю.
doc_id


9

Щоб роздрукувати поточне ім'я файлу 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-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")

Примітки:

Список літератури



0

Якщо ви хочете використовувати повний шлях у своєму vimrc, ви можете використовувати щось подібне:

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

Це дасть вам шлях із зворотними косими рисами в Windows.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.