Gravar a área selecionada no arquivo

13

Eu gostaria de escrever uma área visualmente selecionada em um arquivo.

Por exemplo:

prefix [sample text
more text] suffix

[] é o bloco selecionado que deve ser obtido, resultando em um novo arquivo contendo:

sample text
more text

O wcomando normal usa linhas para '<,'>w! /tmp/testincluir o prefixo / sufixo (e `<,`>w! /tmp/testnão é permitido).

Laktak
fonte

Respostas:

8

Primeiro, copie (também chamado de 'puxão' na linguagem do vim) sua seleção visual para o registro de sua escolha. Por exemplo, para copiar para registrar 'z', faça sua seleção visual e digite "zy.

No caso de você fornecer, você pode fazer isso sem mover o cursor, colocando o cursor no primeiro colchete e digitando v%"zy.

Repartição: v-> iniciar a seleção visual; %-> mude para a chave correspondente; "z-> use o registro 'z'; y-> arranque (copie) a seleção (neste caso, no registro 'z').

Depois de copiar sua seleção visual para registrar 'z', vá para a linha de comando e digite

call writefile(getreg('z', 1, 1), "some-file")

Se você deseja anexar o texto, em vez de substituir, use o sinalizador "a" da seguinte maneira

call writefile(getreg('z', 1, 1), "some-file", "a") 
muru
fonte
Então isso significa que não há nenhum comando interno que possa fazer isso?
Laktak # 6/17
@laktak Não que eu pudesse encontrar ... A split()? getreg(.., 1, 1)retorna uma lista, portanto split()não é necessário.
Muni
Obrigado - você é muito rápido :) Acabei de perceber meu erro e editei o comentário enquanto você respondia.
laktak
3

Você também pode copiar seu conteúdo e criar uma nova janela

Ctrl-w n ........... create a new window
p .................. paste

Então você pode salvar como quiser

SergioAraujo
fonte
0
  1. A ajuda do Vim diz (: h 10.3):

    Nota: Ao usar o modo Visual para selecionar parte de uma linha ou usar CTRL-V para selecionar um bloco de texto, os comandos de dois pontos ainda serão aplicados a linhas inteiras. Isso pode mudar em uma versão futura do Vim.

  2. O plugin vis (# 1195) de Charles Campbell oferece o comando :B {cmd}para aplicar {cmd}apenas uma seleção visual (bloco).

Hotschke
fonte