Это проблема с выходом.<cr>
интерпретируется буквально (предыдущая обратная косая черта здесь не помогает), поэтому Vim еще не видит окончательный "
и жалуется на отсутствующую цитату.Экранирование <
как <lt>
является решением здесь.
Кроме того, вы хотите, чтобы <cr>
интерпретировалось как :execute
(оно находится в двойных кавычках и предшествует обратный слеш), но кто завершаетвесь :execute "...."
сейчас?Необходим еще один <cr>
:
:nnoremap ,g :silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<lt>cr>"<cr>
Однако я думаю, что весь подход слишком хлопотный;переход в режим Ex из :normal
редко является хорошей идеей.
Итак, вам нужно ^
, чтобы получить первое СЛОВО в строке;вы можете сделать это напрямую, так как вы начинаете в обычном режиме, в любом случае:
:nnoremap ,g ^:execute "s/ ".expand("<cWORD>")." //g"<cr>
При этом вам просто потребуется один раунд интерполяции через :execute
.Выглядит намного лучше, правда?!