Изменить : я только что обнаружил плагин vim-textobject-latex , который добавляет именно ту функциональность, которую вы ищете (в дополнение к нескольким другим вещам). Из плагина README:
В настоящее время поддерживаются следующие текстовые объекты:
a i Description
a\\ i\\ Inline math surrounded by ``\\(`` and ``\\)``.
a$ i$ Inline math surrounded by dollar signs.
aq iq Single-quoted text ``\`like this'``.
aQ iQ Double-quoted text ``\``like this''``.
ae ie Environment ``\begin{...}–\end{...}``
Таким образом, вы можете использовать caq
и тому подобное, как вы хотели. Я испытал это, и она работает как рекламируется, но обратите внимание , что это зависит от ВИМ-textobject пользователей плагина. Также обратите внимание, что вы должны убедиться, что textobject-user
плагин загружается первым , иначе все не будет работать.
Если вы не хотите связываться с плагинами, мой оригинальный ответ остается полезным:
Добавление этих двух строк к вашей .vimrc
будет охватывать большую часть того, что вы хотите.
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
Они создают новые текстовые объекты ( aq
и iq
), которые возвращаются к предыдущему `
, переходят в режим визуального выбора, а затем выбирают до следующего '
.
Эта функция будет работать для ciq
, caq
, yiq
, и diq
. Тем не менее, yaq
и daq
не будет дергать / удалять внешние кавычки, поэтому я создал еще один текстовый объект a"
, чтобы обрабатывать это ( i"
не требуется, но я добавил, чтобы держать вещи согласованными:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
Основным недостатком здесь является то, что это нарушит нормальное ca"
и т. Д. Использование. Если вы введете их в качестве предисловия au FileType tex
, у вас будет только эта проблема в .tex
файлах, но это все же может иногда вызывать раздражение. Вы можете также назвать объект как ad
/ id
(«d» для «двойной» кавычки), но это показалось мне менее интуитивным (я стремился к наименьшему отличию от нормальной работы).
Единственный способ обернуть их в два текстовых объекта - написать функцию, которая проверяет другую кавычку за пределами первого набора и установить aq
текстовые объекты для ее вызова.
Примечание : есть несколько других незначительных проблем с ними:
- Янкинг может оставить ваш курсор в неожиданном месте (это можно исправить, добавив метку в командах (например
ma2F`v2f'<cr>`a
, просто не используйте тот, который вы часто используете вручную)
- Курсор должен быть внутри кавычек; странные вещи случаются, если это в кавычках.
Чтобы завершить все это, я лично добавил бы к .vimrc
этому вопросу:
augroup filetype_latex
au!
au FileType tex,plaintex onoremap a' :<c-u>normal! muF`vf'<cr>`u
au FileType tex,plaintex onoremap i' :<c-u>normal! muT`vt'<cr>`u
au FileType tex,plaintex onoremap a" :<c-u>normal! mu2F`v2f'<cr>`u
au FileType tex,plaintex onoremap i" :<c-u>normal! mu2T`v2t'<cr>`u
end augroup
Как вы можете видеть, я решил нарушить нормальную функциональность ca'
/ ya"
/ etc, поэтому мне не пришлось бы изучать новые команды для них, так как я бы не использовал обычную функциональность в LaTeX в любом случае. Это просто личное предпочтение; не сложно поменять имена объектов. Я также добавил в определение типа файла и отметки.
iq
, но, похоже, не работает, например, сdaq
.