Como especificar o conteúdo de um novo buffer na linha de comando?

7

Existe uma maneira de chamar o Vim de forma que ele abra um buffer com algum conteúdo especificado no terminal, ou seja, não seja salvo em um arquivo?

Por exemplo, eu gostaria de executar vime abrir um buffer com a foo, bar, baz and quxgravação nele.

Existe uma opção que faz isso?

Gonçalo Ribeiro
fonte

Respostas:

11

Você tentou algo assim?

$ echo "foo, bar, baz, and qux" | vim -

Ou assim?

$ vim -c "put='foo, bar, baz, and qux'"
romainl
fonte
Aww, doce! Tentei, vim < echo "test"mas sem sucesso. Eu não sabia vim -! E +/ também -cpode ser útil. Obrigado.
Gonçalo Ribeiro
3

Esta solução é totalmente inspirada na do romainl (muito obrigado a ele), mas permite abrir vários buffers com várias strings.

Adicione as seguintes linhas ao seu .zshrc(ou a .bashrcqualquer arquivo relevante em que você defina suas funções do bash)

function mvim {
    CMD="vim "
    for string in "$@"
    do
        CMD=$CMD"-c \"enew | put='"$string"'\" "
    done
    CMD=$CMD"-c \"bufdo 1d\""

    eval $CMD
}

Após a fonte do seu .zshrcarquivo, você poderá chamar a seguinte função:

mvim "foo bar" "baz" "and quz"

O que abrirá uma instância do vim com 3 buffers, cada um contendo uma string.

Se nenhum argumento for fornecido, uma instância regular do vim será iniciada. Se um argumento for uma sequência vazia, um buffer vazio será criado.

EDIT Percebi que, por uma razão que não entendo, uma linha vazia é criada no início de cada buffer, então adicionei a linha

CMD=$CMD"-c \"bufdo 1d\""

Para se livrar dessa linha vazia em todos os buffers.

statox
fonte
11
Esse é um roteiro interessante. Pode ser útil. Obrigado :)
Gonçalo Ribeiro
3

Recentemente, procurei uma maneira de colocar o conteúdo da área de transferência em um novo buffer no vim. Eu acho que vale a pena compartilhar aqui:

vim -c "put! *"

UPDATE:
Este será puto texto do registro *antes !da linha atual.

Os registros *e +refere-se à área de transferência no Windows.

No linux, +tem o conteúdo da área de transferência e *contém o texto selecionado.

Mattia72
fonte
No vimrc, isso poderia ser feito automaticamente se argc for 0. #
dash-tom-bang
Talvez você possa consultar :help quotestare :help quoteplusem sua resposta ajudar aqueles que não conhecem esses registros a entender por que esse comando funciona. Também no GNU / Linux há uma diferença entre *e +, enquanto no Windows eles são equivalentes.
Gonçalo Ribeiro