Estou lendo as postagens de script do vim há uma hora, mas tenho medo de não ter as habilidades necessárias para aplicá-las ao meu problema. Ao editar matemática em documentos em látex, frequentemente desejo substituir símbolos matemáticos como +, -, = por \ Pad {+}, \ Pad {-}, \ Pad {=}, em que \ Pad é uma macro de látex I ' definido para colocar espaço ao redor do símbolo. Gostaria de colocar meu cursor em um símbolo assim, digitar algumas letras, dizer ;P
e fazer com que essa ação substitua o símbolo por
\Pad{whatever the symbol under the cursor is}
Qualquer ajuda seria muito apreciada!
`
for
loop e o:execute
comando. Veja aqui um exemplo: github.com/romainl/dotvim/blob/master/vimrc#L307-L312 Não deve ser difícil fazer a mesma coisa para seus mapeamentos. No entanto, não sei como passar "pad", "ppad", ... como argumento para a função. Eu tenho uma ideia (depois de ler:h g@
, parece que você pode adicionar um grupo opcional de argumentos...
e acessar o primeiro argumento deste grupoa:1
), mas não consegui escrever uma função de trabalho. Se eu puder, eu aviso você.PadMacro
não seja muito enganador, porque é apenas uma função vimscript. Eu chamei assim porque você disse que\Pad{}
era interpretado como uma macro de látex. Mas se você preferir, pode chamá-lo de qualquer outra coisa (PadEnclosure
por exemplo). Para os mapeamentos, digamos que você tem 3 funçõesMyFunctionA
,MyFunctionB
eMyFunctionC
, cada um aplicando uma certa transformação no seu texto. E você quiser mapeá-los para;Pa
,;Pb
e;Pc
. Em seguida, o código a seguir deve poder fazer isso por você: paste.debian.net/plain/356949 Não testado, portanto, não tenho certeza de que funcione.\let string =
para aceitar um item da lista em vez de um bloco; a parte do problema é definir o nome da macro como um item da lista em vez de uma string literal, ou seja, o seguinte não funciona (não surpreendentemente)function! s: . func_name . (type) abort
. Talvez exista alguma maneira de criar a função com um nome genérico e, em seguida, copiar a função genérica para func_name no loop?A ideia é simples:
Para o seu exemplo, você faria:
Que pode ser mapeado para sua conveniência:
Observe que é possível usar um registro diferente se você não quiser desordenar o registro sem nome. Aqui eu uso o
z
registro:fonte
Apenas mais uma solução para o caso em que surround não apenas um símbolo (exemplo da minha configuração para surround com "[" & "]"
A chave é usar "o" e "O" para ir para o início / fim da seleção
fonte