Редагувати : Я щойно відкрив плагін 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
і подібне, як хотіли. Я перевірив його, і він працює як рекламований, але зауважте, що він залежить від плагіна vim-textobject-user . Також врахуйте, що ви повинні переконатися, що 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"
/ і т.д. функціонал, тому мені не доведеться вивчати нові команди для них, так як я б не використовував нормальну функціональність так само в LaTeX. Це лише особисті переваги; не важко переключити назви об’єктів. Я також додав у файлі виявлення та позначки.
iq
, але, схоже, не працює, наприклад, зdaq
.