Команда Vim ведет себя по-разному в конце строки - PullRequest
0 голосов
/ 16 декабря 2011

Я определил несколько карт, которые включают выбранный фрагмент текста, например, чтобы преобразовать «текст» в «\ texttt {текст}».Вот один пример для такой карты:

vmap <buffer> ,t xi\texttt{<Esc>pa}<Esc>

Однако эта карта не работает должным образом, когда выделенный текст находится в конце строки.Возьмем для примера следующую строку:

word1 word2 word3

, когда я выполняю обычную команду viw,t для каждого слова в строке, это результат, который я получаю:

\texttt{word1} \texttt{word2}\texttt{word3} 

сзавершающий пробел, т. е. вставка последнего texttt{ произошла не в том месте.

Как я могу изменить свою карту на работу независимо от того, где она выполняется?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Попробуйте использовать s вместо xi.Это удаляет выделение и переходит прямо в режим вставки, избегая неопределенного положения курсора после удаления с помощью x.

vmap <buffer> ,t s\texttt{<Esc>pa}<Esc>

1 голос
/ 16 декабря 2011

Попробуйте

:nnoremap <buffer> ,t ciw\texttt{<C-R>"}<Esc>

Вам не нужно сначала выбирать слово, просто убедитесь, что курсор где-то на нем находится.См. :help text-objects и :help i_CTRL-R.Также: nmap будет работать так же хорошо, как и :nnoremap в этом случае, но :nnoremap является хорошей практикой, поскольку он предотвращает запуск RHS отображения, который вызывает любые вложенные или рекурсивные отображения.

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