Vim: использовать выражение в качестве имени файла - PullRequest
1 голос
/ 09 марта 2009

Я делаю некоторую отладку, которая включает проверку имени файла журнала "blah N.log", где N - целое число. Периодически добавляется новый файл журнала, и я хотел бы просто перейти к следующему файлу журнала, а не явно делать :e blah\ N.log. Я не могу просто сделать % vim *.log, а затем :n, потому что не все файлы журнала еще существуют.

У меня есть выражение, которое выдает следующее имя файла журнала:

:echo substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', '')

Но я не могу понять, как передать результат этого выражения в команду :e. Любые советы?

Ответы [ 3 ]

2 голосов
/ 09 марта 2009

Или вы можете обернуть его в функцию. Я бы сделал следующее:

function! GetNextLogfile()
    "" store expression in a
    "" let a=...
    return a
endfunction

тогда

: выполнить «редактировать» GetNextLogfile ()

Возможно, вам потребуется отображение или сокращение.

2 голосов
/ 09 марта 2009

Вот способ сделать это - хотя я надеюсь, что есть более элегантный способ.

:execute ':e ' . substitute(substitute(expand('%'), ' \zs\d\+', \=submatch(0) + 1', ''), ' ', '\\ ', '')

Мне нужно добавить вторую команду substitute(), чтобы убрать пробел в имени файла.

1 голос
/ 09 марта 2009

Еще один способ: :e <CTRL-R>= вызывает подсказку выражения. Введите соответствующее выражение (включая использование up для истории выражений), а затем нажмите <Enter>, чтобы заменить значение в исходном приглашении.

Это делает нажатия клавиш:

:e <CTRL-R>=<Up><Enter><Enter>

Это не так просто, как :<Up><Enter>, чтобы повторить мою команду :exec, но, тем не менее, полезный трюк.

...