¿Hay alguna forma de copiar un bloque de texto en el portapapeles del sistema, para poder pegarlo en otro programa?
cut-copy-paste
os-clipboard
thameera
fuente
fuente
cpip
,cpi{
.Respuestas:
Para los sistemas basados en X11 (es decir, Linux y la mayoría de los sistemas similares a UNIX ) hay dos portapapeles que son independientes entre sí:
^C
y se pega con^V
(es como MS Windows).Los sistemas OS X y Windows solo tienen un portapapeles.
Para los sistemas X11 también hay varias herramientas que sincronizan estos portapapeles por usted; así que si parecen ser iguales, puede tener uno de ellos ejecutándose.
Vim tiene dos registros especiales correspondientes a estos portapapeles:
*
utiliza PRIMARIO; mnemónico: S tar es S elect (para copy-on- s elect)+
usa el CLIPBOARD; mnemónico: CTRL PLUS C (para la combinación de teclas común)En Windows y OS X no hay diferencia entre
+
y*
, ya que estos sistemas solo tienen un portapapeles único, y ambos registros se refieren a lo mismo (no importa cuál use).Puede usar estos registros como cualquier registro. Por ejemplo, usando el portapapeles PRIMARIO
*
con los comandosy
yp
:"*yy
"*p
Tal vez podría usar esto como combinaciones de teclas más convenientes:
Si desea interactuar "automáticamente" con el portapapeles del sistema en lugar de consultarlo manualmente todo el tiempo, puede configurar la
clipboard
variable:unnamed
para usar*
(PRIMARIO, en seleccionar)unnamedplus
para usar+
(CLIPBOARD,^C
)Ahora, solo usando
yy
irá al portapapeles del sistema, en lugar del registro sin nombre de Vim, yp
pegará el portapapeles del sistema.También puede asignar a estos registros como cualquier registro con
let
::let @+=42
:let @*=42
La
clipboard
configuración tiene algunas opciones más (como excluir filtros); Pero estos son los conceptos básicos. Ver:help 'clipboard'
para la historia completa ;-)gVim
Si usa gVim, puede obtener un comportamiento de copiar al seleccionar cuando lo usa
:set guioptions+=a
.Esto está habilitado por defecto en los sistemas X11 (copias a PRIMARY), pero no en MS Windows y OSX (ya que seleccionar cualquier texto anularía su portapapeles).
No
+clipboard
?Vim requiere el
+clipboard
indicador de función para que todo esto funcione; se puede comprobar si su Vim tiene esto mediante el uso:echo has('clipboard')
de dentro de Vim (si la salida es0
, es que no está presente, si es1
, lo es), o control de la salida devim --version
para+clipboard
.La mayoría de las distribuciones de Linux se entregan con una compilación Vim "mínima" por defecto, que no tiene
+clipboard
, pero generalmente puede instalarla:vim-gtk
ovim-gnome
.vim-X11
y ejecutar envimx
lugar devim
( más información ).gvim
(esto habilitará también+clipboard
para normalvim
).También puede usar
xclip
,xcopy
oxsel
copiar texto en el portapapeles; vea las siguientes preguntas para soluciones:SSH
También puede usar un portapapeles en máquinas remotas si habilita el reenvío X11 a través de SSH. Esto es especialmente útil con el consejo anterior, ya que puede usarlo
xclip
para acceder al portapapeles de su escritorio. El Vim en la máquina a la que le estás enviando todavía necesitará la+clipboard
función.Esto requiere la
ForwardX11Trusted
configuración, y solo debe hacerse con servidores confiables , ya que esto le da al servidor un control casi completo sobre su sesión X11:Para que esta configuración sea persistente (para que no necesite agregarla
-XY
cada vez), puede hacer algo como esto en su~/.ssh/config
:Neovim
Neovim renovó el soporte del portapapeles. La interfaz incorporada fue removido y reemplazado con un sistema que llamar una utilidad externa tal como
xclip
,xsel
, opbcopy
/pbpaste
.Debería recoger automáticamente estas utilidades y usarlas. En OS X
pbcopy
ypbpaste
debería estar disponible de forma predeterminada, en Linux probablemente desee instalarxclip
, ya que es el más ampliamente disponible (en realidad, hay dos versionesxsel
con indicadores incompatibles . Esto es realmente estúpido).Ver también
:help clipboard
en Neovim.fuente
"<Space>
para obtener un"
. Entonces, en ese caso, tendría que presionar"<Space>+y
o"<Space>*y
copiar."
puedo seleccionar muchos registros con nombre."+
No es magia, es solo registrarse+
. Así por ejemplo, si desea copiar tres cosas al mismo tiempo y pegar cada uno de ellos uno por uno, se puede"1y
,"2y
y"3y
y más tarde"1p
,"2p
y"3p
. Esto es realmente poderoso e inexistente en casi cualquier otro editor. Otro uso interesante es mirar las macros almacenadas. Por ejemplo, si graba conqq
, pero se da cuenta de que necesita arreglarlo, puede: en una línea temporal"qp
, arreglarlo y"qd
.Las otras respuestas cubren cómo copiar texto de su búfer en el portapapeles del sistema. Otra operación común es copiar texto de otro registro al portapapeles. Por ejemplo, si ya ha introducido algo de texto en
"
(el registro predeterminado), es posible que desee cargar ese registro en el portapapeles.Puedes hacer esto con
:let
:let @+=@"
- copia el registro predeterminado en el portapapeleslet @*=@"
- copia el registro predeterminado en la selección primaria X11 ("portapapeles del mouse")let @+=@a
- copiar desde el registroa
al portapapelesTenga en cuenta que esto funciona para los registros en general: las
let @a=@b
copias se registranb
para registrarsea
.fuente
Desde http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Esto cambia el registro Vim predeterminado al
+
registro, que está vinculado al portapapeles del sistema. De:h clipboard-unnamedplus
:fuente
:version
dentro de Vim para ver si + X11 aparece en la lista de características incluidas. También puede verificar si la función 'unnamedplus' está disponible con:if has('unnamedplus')⏎ echo 'yes'⏎ endif
Si no está en Linux, entonces debería usar unnamed en lugar de unnamedplus.En las compilaciones que lo admiten, el registro nombrado
*
es el portapapeles del sistema. Para copiar texto de Vim al portapapeles del sistema, puede seleccionar el texto usando el modo visual y luego presionar "*ypara copiarlo al portapapeles del sistema.Por el contrario, use "*ppara pegar texto del portapapeles del sistema en Vim.
fuente
Le recomiendo que use Gvim y agregue esto a su
.vimrc
:Esto habilita el soporte para CtrlC, CtrlX, CtrlVcomo el bloc de notas de Windows.
Tenga en cuenta que esto también agregará algunos otros accesos directos comunes de Windows, como CtrlSfor
:w
, CtrlAfor select all, etc.fuente
Si su vim no es compatible
+clipboard
, puede usar el complemento fakeclip para Linux, Mac, Windows, tmux, pantalla, ...fuente
Cualquier otra respuesta ha cubierto todas las cosas importantes sobre los registros. Me gustaría agregar una cosa más que uso.
Hay una forma en Vim de copiar directamente el texto seleccionado visualmente en el portapapeles. Simplemente ponga esto en su archivo vimrc :
Y, con esto, cada vez que seleccione visualmente algún texto, se copiará en su portapapeles. Para más información sobre esto,
:help guioptions
Por cierto, esto es solo para gVim.
fuente
guioptions+=a
También se menciona en la respuesta de Carpetsmoker.También puede usar un comando global para colocar algún patrón específico en el portapapeles. Puede ser útil en situaciones en las que tiene información dispersa en un archivo y la copia manual es propensa a errores y cansancio.
Primero limpie el registro que recibirá la información
Luego copie todas las líneas que contienen el patrón
Finalmente transferir (copiar) la información al portapapeles del sistema
si intenta copiar cada línea que contiene un "patrón" directamente en el portapapeles, no funcionará porque el portapapeles no tiene la capacidad de agregar contenido nuevo, por lo tanto, estamos utilizando aquí un registro vim normal para almacenar todas las líneas que contienen el patrón a la vez y luego ponerlo en el portapapeles.
OBS: es necesario clonar el registro antes de usarlo, y el uso de la versión MAYÚSCULAS del registro nos permite agregar contenido, de lo contrario tampoco funcionará.
fuente
Si no puede encontrar la manera de llegar
+clipboard
al trabajo, lo cual no pude por alguna razón, puede hacerlo.Suponiendo que solo desea copiar una sección del archivo, hago
shift
+v
para ir al modo visual y solo resaltar las líneas que quiero copiar. Entonces hago esto.Explicación
'<,'>
- significa que usaste el modo visual para seleccionar un rango (no escribes esto)w !{cmd}
- escriba el rango al stdin decmd
, vea más en:help w_c
wl-copy
yxclip
son programas a los que puedes canalizar texto y lo agregarán al portapapeles de tu sistemaAdemás, una vez que esté en su historial, no tiene que volver a escribir todo. Simplemente seleccione con el modo visual, escriba y
w
luego presione hacia arriba y el comando debería completarse automáticamente. Además, tampoco tiene que usar el modo visual. Puede establecer el rango que desee.fuente