Другие ответы объясняли, почему это происходит. Вот хороший способ обойти это.
wellle / target.vim . Я только недавно нашел этот плагин, и я думаю, что он сильно недооценен. Это обеспечивает новый текстовый объект: din(Мнемоника:. (Г) далить (я) Nside (п) доб «(» Это совместимо с другими операторами и несколькими различными объектами, такими как an(, in", il((внутри последней скобкой)
Он также переопределяет поведение по умолчанию, i(поэтому сначала проверяется, находится ли курсор в скобках, а затем, если нет, он работает так же, как in(. Это поведение может быть включено или выключено. Например:
def foo(bar):
^cursor here
Печатание ci(действует так же, как cin(, так как курсор не в скобках.
def foo( ):
^Cursor here, and in insert mode
Это также принимает количество:
def foo(bar): #Define function foo(bar)
^cursor here
Набрав c2in(:
def foo(bar): #Define function foo( )
^cursor here
Это также обеспечивает новый объект, «аргумент». Например, danaозначает «Удалить вокруг следующего аргумента». Это также принимает количество. Например:
def foo(arg1, arg2, BADarg3):
^ cursor here
Набрав d3ana:
def foo(arg1, arg2):
^ cursor here
У этого плагина есть много других функций, но они являются основными.