otimizar surround com aspas

Dec 22 2020

Eu quero colocar uma palavra entre aspas

Aqui está meu conjunto de comandos:

  • ciw
  • em seguida, quando estou no modo de inserção, eu digito '(eu uso a
    extensão do vim no código Visual, então recebo duas ', não sei se é o caso para o vim "normal")
  • então Ctrl+ C+t
  • então p

Funciona, mas pode haver uma versão mais curta para conseguir isso. Você pode ajudar ?

Respostas

2 Macunaíma Dec 22 2020 at 20:54

Você pode tentar o plugin vim-surround . Para colocar uma palavra entre aspas, você deve ir ysiw'. O plug-in oferece a capacidade de:

  • add ( ysiw")

    word -> "word"
    
  • mudar ( csiw"')

    'word'
    
  • deletar ( ds')

    word
    

os arredores não apenas de palavras únicas, mas de todos os tipos de objetos de texto:

  • cercar palavras entre parênteses ( ysi)")

    def func(some sequence of words) -> def func("some sequence of words")
    
  • mudar parênteses para colchetes ( cs)])

    list = (var1, var2, var3) -> list = [var1, var2, var3] 
    
2 BLayer Dec 22 2020 at 20:43

Se você estiver usando a extensão do VS Code que eu acho que está, então meu entendimento é que ela suporta pelo menos alguns plug-ins e um deles é o vim-surround . Se for esse o caso e você estiver aberto para usar plug-ins, pule para o último parágrafo. Caso contrário, continue lendo.

Do modo normal com o cursor no primeiro caractere da palavra, você pode fazer ...

i"<C-O>f<Space>"<Esc>

Ctrl-O, em Inserir, permite inserir um comando de modo normal antes de retornar ao Inserir.

f<Space> vai para o próximo caractere de espaço na linha (após a palavra).

O problema com isso é se a palavra não é seguida por um espaço (por exemplo, você está no final da linha ou ela é seguida por um sinal de pontuação). Você precisa ajustar o comando do modo Normal (por exemplo, para f.ou $<Left>).

Esse é apenas um exemplo de como fazer isso, mas acho que ao invés de tentar otimizar um comando manual, você deve usar algo mais robusto (mas complicado) e colocá-lo em um mapeamento. Por exemplo, este comando de substituição:

:%s/\<\w*\%#\w*\>/"&"

Isso diz que pegue a posição do cursor ( \%#) e quaisquer caracteres de palavra ao seu redor (ambos \w*) e substitua-o entre aspas.

Um mapeamento de modo normal para isso:

:nnoremap <leader>q :%s/\<\w*\%#\w*\>/"&"<CR>

Agora você otimizou as coisas com um ou dois pressionamentos de tecla ... qualquer que seja o comprimento do mapeamento que você escolher.

O que eu realmente sugiro, entretanto, é que você apenas obtenha o plug - in vim-surround . Em seguida, você pode agrupar palavras facilmente (e mais) com qualquer coisa com que você normalmente agruparia palavras (por exemplo, parênteses).