Ответ 1
ci(
соответствует ci[
, ci{
и cit
и всем остальным <action>i<something>
. Только ci'
и ci"
работают так же, как и они. Выбросы - это цитаты, а не скобки.
Vim не считает, что кавычки попадают парами, в то время как скобки выполняются. Он имеет внутреннюю логику для сопоставления пар, которые работают с фактическими парами, но не с кавычками, следовательно, разница в поведении.
Вы не первый, кто пожалуется на это несоответствие: это одно из решений, возможно, вы можете найти других.
изменить
У меня нет глубоких знаний о внутренностях Vim, к сожалению, поэтому я могу только делать предположения, здесь.
Если вы попросите Vim сделать ci"
, он сделает все возможное, чтобы найти пару двойных кавычек, но двойные кавычки не идут по парам: нет способа сказать, является ли "
закрывающим или открытием один против скобок. Из-за этого, Vim должен сделать некоторые выборы. ИМО, выбор, который будет иметь наибольший смысл, учитывая, как работают другие члены семьи, будет предполагать, что курсор находится между кавычками и выбирается с первого справа на первый слева. Я могу только предположить, что этот метод каким-то образом оказался неправильным или не работал по какой-то причине и что другой метод (текущий) преобладал.
Другим объяснением может быть то, что механизм i<something>
каким-то образом привязан к определенной подсистеме (может быть, такой же, как showmatch
?), которая не может правильно обрабатывать кавычки.
В любом случае, как и вы, я нахожу это несоответствие странным, и я каким-то образом усвоил его и выровнил свое использование <action>i"
, как работают другие. Для того, чтобы фактически сделать 2t"ci"
или какой-то вариант вместо ci"
!! Я знаю неэффективно.
Вы читали :h a'
? Я полностью забыл, где я получил свое "ограниченное понимание" проблемы, но она была там! В нем говорится:
"Работает только в одной строке. Когда курсор начинается с цитаты, Vim выяснит, какие цитаты пары образуют строку, ища с начала строки".
Из этого я получаю следующее: по некоторым причинам, неизвестным нам, Vim использует другой механизм для сопоставления котировок, чем для других пар, и поэтому ci"
отличается от cib
и друзей. Основная причина не совсем понятна, но я вполне уверен, что большая картина очень похожа на то, что я себе представляю.
Для меня это очень похоже на ошибку или ограничение, замаскированное под функцию.
Если вам все еще интересно, я предлагаю вам задать еще один вопрос о vim-dev.