Как получить возвращаемое значение функции после команды: e в Vim - PullRequest
2 голосов
/ 20 декабря 2011

Я написал функцию, чтобы получить полный путь текущего файла под курсором

nmap <F12> :echo GetFullPath()<cr>
function! GetFullPath()
    let currentFile=expand("<cfile>")
    let afterChangeSlash=substitute(currentFile,"/","\\","g")
    let fullPath="e:\\Test\\".afterChangeSlash
    return fullPath
endfunction

Когда я вызываю функцию после команды: echo, я получаю ожидаемый результат, например:

:echo GetFullPath()

e: \ Test \ test.h

Однако, когда я вызываю его после команды: e (edit):

:e GetFullPath()

Vim просто создайте новый файл с именем GetFullPath ()

Почему команда: e будет обрабатывать вызов функции буквально, а команда: echo - нет?

Ответы [ 2 ]

5 голосов
/ 20 декабря 2011

Вы можете использовать :execute, чтобы построить свою командную строку ex и выполнить ее:

:exe "e ".GetFullPath()

Или использовать синтаксис `` = ` для расширениявыражение Vim:

:e `=GetFullPath()`

Если вы проверите справку для :edit и :echo, вы заметите, что первый ожидает, что его аргумент будет именем файла (в буквальном смысле), тогда как :echoожидает выражение, которое будет оценено.

0 голосов
/ 20 декабря 2011

Некоторые команды ex ожидают, что им будет дано выражение, в то время как другие ожидают, что им будет дана строка.Для вашего случая, чтобы это работало, используйте exec:

nmap <F12> :exec 'e ' . GetFullPath()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...