Цитирование или конкатенация не имеют к этому никакого отношения.
Исходная команда, скорее всего, ничего не делает, потому что вы забыли объявить команду Or
. Я, очевидно, не знаю, какую книгу вы используете, но, скорее всего, она выглядит как :command -nargs=1 Or read
.
Ваша вторая команда не выполнена, поскольку вы также удалили silent!
. Это утверждение подавит все ошибки. Поскольку вы удалили его, Vim теперь предупредит вас, что Or <argument>
не известен редактору, поэтому отсутствующий %:e
не имеет к этому никакого отношения.
Если вы хотите узнать больше о %:e
, прочитайте http://vimdoc.sourceforge.net/htmldoc/cmdline.html#%:e - он будет заменен расширением текущего файла.
EDIT:
Я вижу, вас также смутил оператор .
, который можно использовать для конкатенации строк, и это правильно.
.
просто означает «объединить первую строку со второй», например, let val2 = 'value ' . val1
.
Проблема в том, что у Vim есть несколько команд, которые сами выполняют конкатенацию, :execute
, :echo
и :echomsg
, и это лишь некоторые из них. Такие команды автоматически добавят пробел, если вы передадите ему несколько выражений. Следующие команды должны быть эквивалентны:
:exec ":0r" $HOME . "/.vim/templates/" . &ft . ".tpl"
:exec ":0r " . $HOME . "/.vim/templates/" . &ft . ".tpl"
:exec (":0r " . $HOME . "/.vim/templates/" . &ft . ".tpl")
:exec ":0r" ($HOME . "/.vim/templates/" . &ft . ".tpl")
Это просто говорит о том, что скрипт Vim почти красив.