выполнить команду работает правильно, но не работает после отображения - PullRequest
0 голосов
/ 11 февраля 2019

Выполненная команда работает нормально.Но когда он сопоставлен с каким-либо ключом, он сообщает о синтаксических ошибках.

Когда я выполняю приведенную ниже команду execute, она работает как положено

:silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<cr>"

Но когда я сопоставляю ее с каким-то ключом, скажем

:nnoremap ,g :silent execute "normal! ^:s/ ".expand("<cWORD>")." //g\<cr>"

Затем, когда я вызываю отображение, выдается следующая ошибка:

E114: Missing quote: " //g\
E15: Invalid expression: "normal! ^:s/ ".expand("<cWORD>")." //g\

1 Ответ

0 голосов
/ 11 февраля 2019

Это проблема с выходом.<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.Выглядит намного лучше, правда?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...