Кавычки в LaTeX отличаются от обычного текста тем, что они отформатированы ``like this''
(или `like this'
для одинарных кавычек). Это затрудняет навигацию по ним в Vim.
Я обычно использую что-то вроде T`ct'
(назад, до `
, изменить до '
). Однако это неуклюже и неестественно. Я бы предпочел , чтобы иметь возможность использовать что - то вдоль линий ciq
( «изменения в кавычках»), так же , как я могу сделать ciw
, ca)
, ci"
, ca'
и т.д.
Есть ли какой-нибудь способ сказать Vim рассматривать ``LaTeX'' `quotes'
как текстовые объекты? (Как плюс, есть ли способ вызвать это только при редактировании .tex
файла?)
источник
iq
, но, похоже, не работает, например, сdaq
.aq
дополнительным подобным сопоставлением. Я отредактировал ответ. Я также поменял местами T` с t 'в отображении, чтобы он сначала искал вперед, что мне кажется более естественным.daq
на``foo''
только привожу`foo'
.f
иt
, что потребует написания целой функции с переменными и всего остального. У меня нет времени, чтобы сделать это прямо сейчас.Изменить : я только что обнаружил плагин vim-textobject-latex , который добавляет именно ту функциональность, которую вы ищете (в дополнение к нескольким другим вещам). Из плагина README:
В настоящее время поддерживаются следующие текстовые объекты:
Таким образом, вы можете использовать
caq
и тому подобное, как вы хотели. Я испытал это, и она работает как рекламируется, но обратите внимание , что это зависит от ВИМ-textobject пользователей плагина. Также обратите внимание, что вы должны убедиться, чтоtextobject-user
плагин загружается первым , иначе все не будет работать.Если вы не хотите связываться с плагинами, мой оригинальный ответ остается полезным:
Добавление этих двух строк к вашей
.vimrc
будет охватывать большую часть того, что вы хотите.Они создают новые текстовые объекты (
aq
иiq
), которые возвращаются к предыдущему`
, переходят в режим визуального выбора, а затем выбирают до следующего'
.Эта функция будет работать для
ciq
,caq
,yiq
, иdiq
. Тем не менее,yaq
иdaq
не будет дергать / удалять внешние кавычки, поэтому я создал еще один текстовый объектa"
, чтобы обрабатывать это (i"
не требуется, но я добавил, чтобы держать вещи согласованными:Основным недостатком здесь является то, что это нарушит нормальное
ca"
и т. Д. Использование. Если вы введете их в качестве предисловияau FileType tex
, у вас будет только эта проблема в.tex
файлах, но это все же может иногда вызывать раздражение. Вы можете также назвать объект какad
/id
(«d» для «двойной» кавычки), но это показалось мне менее интуитивным (я стремился к наименьшему отличию от нормальной работы).Единственный способ обернуть их в два текстовых объекта - написать функцию, которая проверяет другую кавычку за пределами первого набора и установить
aq
текстовые объекты для ее вызова.Примечание : есть несколько других незначительных проблем с ними:
ma2F`v2f'<cr>`a
, просто не используйте тот, который вы часто используете вручную)Чтобы завершить все это, я лично добавил бы к
.vimrc
этому вопросу:Как вы можете видеть, я решил нарушить нормальную функциональность
ca'
/ya"
/ etc, поэтому мне не пришлось бы изучать новые команды для них, так как я бы не использовал обычную функциональность в LaTeX в любом случае. Это просто личное предпочтение; не сложно поменять имена объектов. Я также добавил в определение типа файла и отметки.источник
Это старый вопрос, но в интересах будущих посетителей: мне легче менять латексные кавычки с помощью:
И тогда
This thing is "Foobar"!
будет отлично работать в Vim и латексе.источник
Plugin
vim-sandwich
Другой полезный плагин для этого,
vim-sandwich
который определил фут-специфическое окружениеl`
илиl'
для`text'
,l"
для``text''
иС отображениями по умолчанию после работы
`text'
сcisl'
или , если автоматическое определение ближайшего окружения прекрасноcib
(например , курсор наh
в`a (phony) text'
требуется нажиматьvibibc
). Тем не менее, вы можете определить следующий дополнительный текстовый объектiq
(пример OP)omap <unique> iq <Plug>(textobj-sandwich-query-i)l' xmap <unique> iq <Plug>(textobj-sandwich-query-i)l' omap <unique> aq <Plug>(textobj-sandwich-query-a)l' xmap <unique> aq <Plug>(textobj-sandwich-query-a)l' omap <unique> iQ <Plug>(textobj-sandwich-query-i)l" xmap <unique> iQ <Plug>(textobj-sandwich-query-i)l" omap <unique> aQ <Plug>(textobj-sandwich-query-a)l" xmap <unique> aQ <Plug>(textobj-sandwich-query-a)l"
Теперь просто нажмитеciq
илиciQ
работает.text
сsaiwl'
одиночными апострофами , чтобы получить`text'
Узор команды является
sa{motion/textobject}{surrounding}
и средство Invoke оператораadd surrounding
наinner word
и объемный типом являетсяlatex single quote
.sdl'
илиsdb
srl'l"
илиsrbl"
Поддерживает
источник