Como eu defino uma função vim em uma única linha?

1

Como | é usado para separar comandos, pensei em fazer isso:

:function! SomeFunc() | return 0 | endfunction

Funciona bem quando eu o digito em linhas separadas (inserir a primeira linha faz com que ele solicite as linhas restantes):

:function! SomeFunc()
  return 0
endfunction

Agora vejo esta advertência em :help :bar :

These commands see the '|' as their argument, and can therefore not be followed by another Vim command:

:function

Existe alguma maneira de contornar isso?

Eu vejo onde está escrito ...

You can also use to separate commands in the same way as with '|'. To insert a use CTRL-V CTRL-J. "^@" will be shown.

Mas isso não funciona:

:function! SomeFunc() <NL> return 0 <NL> endfunction

Isso gera esse erro:

E488: Trailing characters

Isso funciona se eu digitar manualmente a seqüência CTRL-V CTRL-J:

:function! SomeFunc() ^@ return 0 ^@ endfunction

Mas isso ainda não é uma solução aceitável porque eu quero ser capaz de simplesmente copiar e colar o comando function! e pressionar Enter ...

    
por Tyler Rick 02.12.2014 / 00:01

1 resposta

5

Uma opção seria usar exe :

exe ":function! SomeFunc() \n return 0 \n endfunction"

Os caracteres \n são interpretados como novas linhas pelas sequências de aspas duplas. Isso significa que você deve ter cuidado para escapar de qualquer sequência especial.

Dito isto,

I want to be able to simply copy and paste the function! command and press Enter...

Como romainl mencionou, seu objetivo final não é claro. Se isso é algo que você faz com frequência por algum motivo, talvez exista uma maneira melhor de conseguir o que deseja. É uma boa ideia descrever seu problema em termos de por que você precisa dessa funcionalidade.

    
por 02.12.2014 / 11:31

Tags