Existe alguma maneira de copiar todas as linhas do arquivo aberto para a área de transferência no editor VI. Eu tentei, yGmas não está usando a área de transferência para armazenar essas linhas.
Então é possível?
Existe alguma maneira de copiar todas as linhas do arquivo aberto para a área de transferência no editor VI. Eu tentei, yGmas não está usando a área de transferência para armazenar essas linhas.
Então é possível?
Respostas:
Você deve puxar o texto para o *
ou +
registra :
gg"*yG
Explicação:
gg
para colocar o cursor no primeiro caractere do arquivo"*y
para iniciar um comando de arranque no registro *
da primeira linha, até ...G
para ir no final do arquivo"
.
:version
vim e procure a +xterm_clipboard
bandeira. Se for precedido por um sinal de menos, você não terá essa funcionalidade. Se for esse o caso, convém compilar o vim por conta própria ou executar o gvim, que geralmente tem esse recurso ativado.
Usar:
:%y+
arrancar todas as linhas.
Explicação:
%
para consultar o próximo comando para trabalhar em todas as linhasy
arrancar essas linhas+
copiar para a área de transferência do sistemaNB : No Windows, +
e *
são equivalentes, veja esta resposta .
:help
para garantir que você esteja realmente no vim.
set clipboard=unnamed
, mas isso funcionou muito bem!
E850: Invalid register name
:(
no Mac
copiar parte selecionada: selecione visualmente o texto (digite v
ou V
no modo normal) e digite:w !pbcopy
copie o arquivo inteiro :%w !pbcopy
passado da área de transferência :r !pbpaste
pbcopy
é um utilitário para Mac. No Linux, xsel
pode funcionar ou clip
no Windows.
:%w !pbcopy
ainda funcionará se o arquivo for maior que a altura do terminal.
A área de transferência é buffer +. Para copiar para a área de transferência, faça "+ye [movimento].
Então, gg"+yGirá copiar o arquivo inteiro.
Da mesma forma, para colar da área de transferência, "+p
Outra maneira fácil de copiar o arquivo inteiro, se você estiver tendo problemas com o VI, é apenas digitando "cat filename". Ele fará o eco do arquivo para a tela e você poderá simplesmente rolar para cima e para baixo e copiar / colar.
:!cat %
. E para copiar o conteúdo do arquivo programaticamente para a área de transferência no Mac OS::!cat % | pbcopy
Isto é o que eu faço para puxar o arquivo inteiro:
ggVGy
clipboard
conjunto para copiar o texto arrancado +
.
Você pode usar o comando "cat" para abrir o arquivo e usar o mouse para copiar
reset
antes do terminal, selecione tudo e copie. Isso funciona através da ssh
sessão.
(em resposta a @rshdev e para evitar ter que recompilar o vim com + xterm_clipboard por @nelstrom nos comentários sobre o OP)
existe um programa chamado xclip que funciona como putclip no Ubuntu 11:
:%!xclip -sel clip
u
não está instalado por padrão. para instalar, use:
sudo apt-get install xclip
No Ubuntu 12
você pode tentar instalar o vim-gnome
pacote:
sudo apt-get install vim-gnome
Eu tentei, porque vim --version
me disse que teria o sinalizador xterm_clipboard desativado (indicado por - ), necessário para usar a funcionalidade da área de transferência.
-> instalar o pacote vim-gnome no Ubuntu 12 também instalou uma versão do vim baseada em console, que tem essa opção ativada (indicada por um + antes do sinalizador xterm_clipboard)
No Arch Linux
você pode instalar vim-clipboard
pelo mesmo motivo.
Se você executar o neovim, deverá instalar xclip
(conforme explicado em help clipboard-tool
)
Se você estiver usando o Vim no modo visual, as teclas padrão de recortar e colar também se aplicam, pelo menos no Windows.
No terminal Ubuntu (Gnome), pelo menos, a cópia padrão também funciona ( CTRLSHIFTCembora não pareça haver um atalho de teclado padrão para select all
(exceto o ALTEseguido por A).
Eu tentei alguns dos comandos que as pessoas mencionaram acima. Nenhum funcionou. Então peguei o mais simples de todos.
Etapa 1: vi <filename>
Etapa 2: Clique com o botão direito do mouse na barra de título da janela Putty
Etapa 3: Selecione "Limpar rolagem" (para evitar copiar o restante da sua sessão SSH)
Etapa 4: Clique com o botão direito novamente e selecione "Copiar tudo para a área de transferência".
Window > Settings > lines of scrollback
para 40000 (também disponível clicando com o botão direito do mouse na barra de título). Também ajuda a usar em cat
vez do vi, uma vez que percorre todo o texto.
:set go=a
ggVG
Veja :help go-a
:
'a' Autoselect: If present, then whenever VISUAL mode is started,
or the Visual area extended, Vim tries to become the owner of
the windowing system's global selection. This means that the
Visually highlighted text is available for pasting into other
applications as well as into Vim itself. When the Visual mode
ends, possibly due to an operation on the text, or when an
application wants to paste the selection, the highlighted text
is automatically yanked into the "* selection register.
Thus the selection is still available for pasting into other
applications after the VISUAL mode has ended.
If not present, then Vim won't become the owner of the
windowing system's global selection unless explicitly told to
by a yank or delete operation for the "* register.
The same applies to the modeless selection.
Bem, todas essas abordagens são interessantes, no entanto, como programador preguiçoso eu uso o yank all line usando a combinação do número + y
por exemplo, você possui um arquivo de código-fonte com um total de 78 linhas, pode fazer o seguinte:
gg
para obter o cursor na primeira linha y
-> puxa 78 linhas abaixo do cursor e da linha atual Não havia um conceito de "área de transferência" no vi de Bill Joy, então não acho que exista uma maneira integrada de fazê-lo.
O recurso copiar automaticamente qualquer coisa destacada na área de transferência do gVim é mais fácil ou use um programa externo via:!
Para o vim de Cygwin, eu uso
:%!putclip
u
Talvez o Ubuntu tenha um aplicativo CLI como o putclip?
Se seus dedos estiverem no padrão CTRL-A CTRL-C
, tente os mapeamentos de $VIMRUNTIME/mswin.vim
.
" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG
Eu os tenho mapeados para <Leader><C-a>
e <Leader><C-c>
.
Copie o arquivo inteiro dentro do vim ou de suas guias
y G
depois vá para uma guia e cole
p
e para cortar o arquivo inteiro, use
d G
Sei que dez anos deveriam ser resolvidos, mas as duas primeiras respostas não funcionaram para mim, então continuei cavando. Em um Redhat (servidor remoto) - Windows 10 (máquina local), se você não puder selecionar a coisa toda com um mouse, ficará preso porque as cópias habituais não funcionam entre as áreas de transferência da máquina remota e local.
Portanto, para copiar no Linux remoto e colar no Windows local, especifique o buffer primário com o *comando ye faça um belo puxão duplo
Use gg" * yy.
Eu criei uma função para executar esta ação, coloque-a no seu ~/.vimrc
.
fun! CopyBufferToClipboard()
%y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()
OBS: Se você estiver usando o neovim, também precisará de um gerenciador de área de transferência como o xclip. para mais informações, digite neovim:h checkhealth
Também é importante mencionar que nem sempre um simples y
vai copiar para a área de transferência, a fim de tornar cada alimentação cópia +
wich é "Clipboard Register" tentar set: :set clipboard=unnamed,unnamedplus
. Para mor informações, consulte: :h unnamed
.
Aqui mais informações sobre o vim wikia.
Você pode usar um atalho, como este:
noremap <F6> :%y+<CR>
Isso significa que, quando você pressiona F6 no modo normal, ele copia o arquivo inteiro e o adiciona à área de transferência. Ou você pode digitar no modo normal :%y+
e pressionar Enter
.
Clique no botão esquerdo do mouse, arraste pela seção que deseja copiar e liberar. O código é automaticamente copiado para a área de transferência.
vi
jeito nenhum ).
Não consegui copiar arquivos usando as respostas acima, mas tenho uma massa e encontrei uma solução alternativa no Quora.
Nota: copia todos os caracteres impressos dessa sessão para o arquivo de log, tornando-se maior eventualmente. Nesse caso, exclua o arquivo de log e escolha o arquivo de destino para que o conteúdo desse arquivo específico seja copiado em sua máquina.