Другие ответы объясняли, почему это происходит. Вот хороший способ обойти это.
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
У этого плагина есть много других функций, но они являются основными.