Ответ 1
Это работает для меня:
:echo expand("%")
Скажем, я запускаю Vim и pwd возвращает
/home/rafid/myproject
И скажу, что я сейчас редактирую файл
/home/rafid/myproject/website/editpage.php
Есть ли какая-либо команда, которая возвращает это для меня?
website/editpage.php
То есть путь к файлу относительно текущей папки.
Это работает для меня:
:echo expand("%")
Хотя expand('%')
часто работает, в редких случаях это не так. Но вы можете заставить Vim всегда fnamemodify
относительный путь, вызывая fnamemodify
:
:echo fnamemodify(expand("%"), ":~:.")
Из руководства:
:. Reduce file name to be relative to current directory, if
possible. File name is unmodified if it is not below the
current directory.
For maximum shortness, use ":~:.".
:~
является обязательным. Это уменьшит путь относительно вашей домашней папки, если это возможно (~/...
). (К сожалению, это работает только в вашем доме; он не превратит /home/fred
в ~fred
если вы не вошли в систему как fred
.)
Если у вас ограниченное пространство и вы можете управлять "нечеткой" информацией о том, где находится файл, тогда проверьте pathshorten()
который сжимает имена папок до одного символа:
:echo pathshorten('~/.vim/autoload/myfile.vim')
~/.v/a/myfile.vim
Ссылка:: :h fnamem<Tab>
и :h pathsh<Tab>
Другой вариант - написать функцию vim. Вот моя скромная попытка:
function! Relpath(filename)
let cwd = getcwd()
let s = substitute(a:filename, l:cwd . "/" , "", "")
return s
endfunction
Вы вызываете Relpath с любым полным именем пути и отделяете текущее имя каталога от его аргумента.
Например, попробуйте :echo Relpath(expand("%:p"))
(модификатор :p
просит Vim вернуть полный путь). Очевидно, это не обязательно в вашем случае, так как %
сам по себе возвращает относительный путь. Однако это может пригодиться и в других случаях.
если вы используете autocmd, чтобы всегда устанавливать текущий каталог буфера, над которым вы работаете (cd%: p: h), вы можете просто ввести: cd
Да, вы можете использовать
: арг
Это даст вам имя файла текущего файла в информационных целях.
Blockquote Это работает для меня:
: echo expand ( "%" )
Это работает только если вы открыли файл с относительным файлом:
for vi ./foo, expand("%") will be ./foo
но
for vi /tmp/foo expand("%") will be /tmp/foo