Ao usar ci"o cursor, não é necessário residir na área de aspas duplas.
|String somestring = "some text";
Assumindo que o tubo esteja na posição do cursor, ci"ele fará o salto para a área citada.
Por outro lado, ao usar ci(, o cursor deve estar dentro dos parênteses para funcionar e não moverá o cursor dentro deles.
Qual é o motivo dessa diferença de comportamento? Suponho que existe uma maneira de mapear as chaves para que esse comportamento esteja presente. Existem desvantagens em fazer isso?
cursor-motions
cursor-movement
Reaver
fonte
fonte
Respostas:
A principal diferença aqui é que as declarações entre parênteses (direcionadas por
ci(
) podem ser aninhadas, enquanto as seqüências de caracteres citadas (direcionadas porci"
) não podem.Se o cursor estiver fora de alguma declaração entre parênteses, ele ainda poderá estar dentro de outra. Por exemplo (
*
marca a posição do cursor):A linha em que o cursor está contém
(1, 2, 3)
, mas o cursor também está dentro doarray(...)
bloco maior . Nesse caso, o maior é o destino apropriadoci(
.Se o cursor estiver fora de alguma string citada, uma vez que ela não pode ser aninhada, não há nada perfeitamente sensato a ser feito. Portanto, o Vim aproveita e encontra a primeira string citada na linha.
fonte
A família Citação de objetos de texto (
i'
,i"
,a'
ea"
) são diferentes do que o resto dos objetos de texto em que eles só olhar para a linha atual. Por esse motivo, optou-se por não exigir que o cursor estivesse dentro das aspas. Em vez disso, o Vim pesquisará para frente dentro da linha para encontrar uma string entre aspas quando o cursor ainda não estiver dentro de uma.Há uma discussão em torno de alguns patches que permitiriam que esse comportamento de pesquisa direta fosse implementado também para objetos de texto baseados em bloco.
fonte
As outras respostas abordaram por que isso acontece. Aqui está uma boa maneira de contornar isso.
wellle / target.vim . Eu encontrei recentemente este plugin e acho extremamente subestimado. Ele fornece um novo objeto de texto:
din(
Mnemonic:. (D) elete (i) nside (n) ext "(" Este é compatível com outros operadores e vários objetos diferentes, comoan(
,in"
,il(
(dentro do último parênteses)Ele também substitui o comportamento padrão de
i(
modo que ele primeiro verifique se o cursor está entre parênteses e, se não estiver, funciona da mesma maneira quein(
. Esse comportamento pode ser ativado ou desativado. Por exemplo:A digitação
ci(
age da mesma forma quecin(
, já que o cursor não está entre parênteses.Isso também aceita uma contagem:
Digitando
c2in(
:Isso também fornece um novo objeto, "argumento". Por exemplo,
dana
significa "Excluir no próximo argumento". Isso também aceita uma contagem. Por exemplo:Digitando
d3ana
:Existem muitos outros recursos que este plug-in possui, mas esses são os básicos.
fonte