¿Hay alguna forma de copiar todas las líneas del archivo abierto al portapapeles en el editor de VI? Lo intenté yGpero no está usando el portapapeles para almacenar esas líneas.
Entonces, ¿es posible?
¿Hay alguna forma de copiar todas las líneas del archivo abierto al portapapeles en el editor de VI? Lo intenté yGpero no está usando el portapapeles para almacenar esas líneas.
Entonces, ¿es posible?
Respuestas:
Debe tirar el texto a los registros*
o :+
gg"*yG
Explicación:
gg
para llevar el cursor al primer caracter del archivo"*y
para iniciar un comando de extracción al registro *
desde la primera línea, hasta ...G
ir al final del archivo"
.
:version
en vim y busque la +xterm_clipboard
bandera. Si está precedido por un signo menos, entonces no tendrá esta funcionalidad. Si este es el caso, es posible que desee compilar vim usted mismo o ejecutar gvim, que generalmente tiene esta característica habilitada.
Utilizar:
:%y+
para tirar de todas las líneas.
Explicación:
%
para referir el siguiente comando para trabajar en todas las líneasy
para tirar de esas líneas+
copiar al portapapeles del sistemaNB : en Windows, +
y *
son equivalentes ver esta respuesta .
:help
para asegurarte de que estás realmente en vim.
set clipboard=unnamed
, ¡pero esto funcionó muy bien!
E850: Invalid register name
:(
en Mac
copiar parte seleccionada: seleccionar visualmente el texto (escribir v
o V
en modo normal) y escribir:w !pbcopy
copia todo el archivo :%w !pbcopy
pasado del portapapeles :r !pbpaste
pbcopy
es una utilidad para Mac. En Linux, xsel
podría funcionar en su lugar, o clip
en Windows.
:%w !pbcopy
aún funciona si el archivo es más largo que la altura del terminal.
El portapapeles es buffer +. Para copiar al portapapeles, haz "+yy [movimiento].
Entonces, gg"+yGcopiará todo el archivo.
Del mismo modo, para pegar desde el portapapeles, "+p
Otra forma fácil de copiar todo el archivo si tiene problemas para usar VI, es simplemente escribiendo "cat filename". Hará eco del archivo en la pantalla y luego puede desplazarse hacia arriba y hacia abajo y copiar / pegar.
:!cat %
. Y para copiar el contenido del archivo mediante programación al portapapeles en Mac OS::!cat % | pbcopy
Esto es lo que hago para tirar todo el archivo:
ggVGy
clipboard
conjunto para copiar el texto arrancado +
.
Puede usar el comando "cat" para abrir el archivo y usar el mouse para copiar
reset
el terminal de antemano, luego seleccione todo y copie. Esto funciona a través de la ssh
sesión.
(en respuesta a @rshdev, y para evitar tener que volver a compilar vim con + xterm_clipboard por @nelstrom en los comentarios sobre OP)
hay un programa llamado xclip que funciona como putclip en Ubuntu 11:
:%!xclip -sel clip
u
No está instalado por defecto. para instalar, use:
sudo apt-get install xclip
En Ubuntu 12
puede intentar instalar el vim-gnome
paquete:
sudo apt-get install vim-gnome
Lo probé porque vim --version
me dijo que tendría la bandera xterm_clipboard desactivada (indicada por - ), que es necesario para usar la funcionalidad del portapapeles.
-> la instalación del paquete vim-gnome en Ubuntu 12 también instaló una versión basada en consola de vim, que tiene esta opción habilitada (indicada por un + antes del indicador xterm_clipboard)
En Arch Linux
Puedes instalarlo vim-clipboard
por el mismo motivo.
Si ejecuta neovim, entonces debe instalar xclip
(como se explica en help clipboard-tool
)
Si está utilizando Vim en modo visual, también se aplican las teclas estándar de cortar y pegar, al menos con Windows.
Al menos en la terminal de Ubuntu (Gnome), la copia estándar también funciona ( CTRLSHIFTCaunque no parece haber un método abreviado de teclado estándar para select all
(aparte del ALTEseguido por A).
Probé algunos de los comandos que la gente ha mencionado anteriormente. Ninguno funcionó. Entonces conseguí el más simple de todos.
Paso 1: vi <filename>
Paso 2: haga clic con el botón derecho en la barra de título de la ventana Putty.
Paso 3: seleccione "Borrar el desplazamiento hacia atrás" (para evitar copiar el resto de su sesión SSH).
Paso 4: haga clic derecho nuevamente y seleccione "Copiar todo al portapapeles".
Window > Settings > lines of scrollback
a 40000 (también disponible haciendo clic derecho en la barra de título). También ayuda usar en cat
lugar de vi, ya que se desplaza por todo el texto.
:set go=a
ggVG
Ver :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.
Bueno, todos estos enfoques son interesantes, sin embargo, como programador perezoso, utilizo tirar de todas las líneas mediante la combinación de número + y
por ejemplo, tiene un archivo de código fuente con un total de 78 líneas, puede hacer lo siguiente:
gg
para obtener el cursor en la primera línea y
-> tira 78 líneas debajo de su cursor y la línea actual No había un concepto de "portapapeles" en el vi de Bill Joy, así que no creo que haya una forma integrada de hacerlo.
La función de copia automática de todo lo resaltado en el portapapeles de gVim es más fácil o utiliza un programa externo a través de:!
Para vim de Cygwin uso
:%!putclip
u
¿Quizás Ubuntu tiene una aplicación CLI como putclip?
Si sus dedos están predeterminados en CTRL-A CTRL-C
, intente las asignaciones desde $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
Los tengo asignados a <Leader><C-a>
y <Leader><C-c>
.
Copie todo el archivo dentro del vim o sus pestañas
y G
luego pasar a una pestaña y pegar
p
y para cortar todo el archivo use
d G
Sé que diez años en esto deberían resolverse, pero las dos primeras respuestas no funcionaron para mí, así que seguí investigando. En un Redhat (servidor remoto) - Windows 10 (máquina local), si no puede seleccionar todo con un mouse, está atascado porque las copias habituales no funcionan entre el portapapeles de la máquina remota y local.
Entonces, para copiar en el Linux remoto y pegar en el Windows local, especifique el búfer primario con el * y haga un buen doble tirón
Uso gg" * yy.
He creado una función para realizar esta acción, colóquela en su ~/.vimrc
.
fun! CopyBufferToClipboard()
%y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()
OBS: Si está utilizando neovim, también necesita un administrador de portapapeles como xclip. para más información escriba en neovim:h checkhealth
También es importante mencionar que no siempre un simple y
copiará en el portapapeles, con el fin de hacer que cada copia de alimentación +
cual es "portapapeles Registro" tratar de establecer: :set clipboard=unnamed,unnamedplus
. Para más información ver::h unnamed
.
Aquí más información sobre vim wikia.
Puedes usar un shortcur, como este:
noremap <F6> :%y+<CR>
Significa que cuando presiona F6 en modo normal, copiará todo el archivo y lo agregará al portapapeles. O simplemente puede escribir en modo normal :%y+
y luego presionar Enter
.
Haga clic con el botón izquierdo del mouse, arrastre por la sección que desea copiar y suelte. El código se copia automáticamente en el portapapeles.
vi
mucho menos).
No pude copiar archivos usando las respuestas anteriores, pero tengo masilla y encontré una solución en Quora.
Nota: copia todos los caracteres impresos de esa sesión en el archivo de registro, por lo que eventualmente se hará grande. En ese caso, elimine el archivo de registro y seleccione el archivo de destino para que se copie el contenido de ese archivo en particular en su máquina.