autocmd проверяет имя файла в vim? - PullRequest
9 голосов
/ 15 мая 2011

Я хочу написать некоторые autocmd, которые проверяют, является ли имя файла тем или иным ..

Я пытался:

autocmd VimEnter * if % is "preamble" | Explore | endif
autocmd VimEnter * if %=="preamble" | Explore | endif
autocmd VimEnter * if &filename == "preamble" | Explore | endif

но ничего из этого не работает?

Что мне делать?

(этот пример слишком упрощен, обратите внимание, что я также хотел бы иметь выражение else).

Ответы [ 4 ]

11 голосов
/ 15 мая 2011

Вы должны получить текущее имя файла как @%.Например, echo @% даст вам имя файла, тогда как echo % не даст.Однако для действий с файлом используйте %, например, source %.

Это, вероятно, должно работать для того, что вы хотите сделать:

autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif
7 голосов
/ 15 мая 2011
autocmd BufRead,BufNewFile preamble Explore
4 голосов
/ 15 мая 2011

В исходном посте есть две проблемы с примерами:

  1. Ни %, ни &filename не будут возвращать имя файла в том виде, в котором вы его использовали.
    Посмотрите на справку для функции expand(), чтобы узнать, как получить имя файла: :h expand()

  2. Вы игнорируете слот в autocmd, где обычно указывается шаблон сопоставления файлов. Третий слот в autocmd (* в ваших версиях) на самом деле представляет собой шаблон, соответствующий именам файлов. Смотри :h autocmd-patterns. Это должно работать нормально, если вы хотите игнорировать слот шаблона, но если это так, вы должны решить проблему в параграфе 1 выше. Например.,

    autocmd BufRead,BufNewFile * if expand('%') =~ "preamble" | Explore | endif

1 голос
/ 21 января 2016

Дополнительная информация Использование '@%' с autocmd

Некоторые autocmd события не поддерживают именованный регистр @% для чтения текущего имени файла,В этих случаях лучше использовать :

expand('<afile>')
...