2012-07-09 10 views
64

Mientras uso vim dentro de una sesión de tmux no puedo jalar o pegar al registro sin nombre. Ir a un registro nombrado funciona bien, pero el nombre nunca funciona.Reparar Vim + Tmux yank/paste en el registro sin nombre

error es:

E353: Nothing in register * 

Sin tmux, vim funciona bien usando mi configuración actual. ¿Cómo lo arreglo para que pueda usar y y luego p sin errores y sin especificar el registro?

+0

¿Podría mostrar su tmux.conf? – Conner

Respuesta

94

A partir del mensaje de error (Nothing in register *), parece que cuando hace un simple ?p, su instancia de Vim está utilizando el * register en lugar del unnamed register*. Esto es probablemente porque su clipboard option incluye el valor unnamed. Cuando se configura de esta manera, Vim usará el registro * en lugar del registro sin nombre para operaciones de yank, delete, change y put por defecto (es decir, a menos que especifique otro registro con un prefijo "; por ejemplo, "ap para poner desde el registro a).

* El registro sin nombre se llama en realidad " (comillas dobles). Solo es "sin nombre" en el sentido de que no tiene que nombrarlo para usarlo (es el valor predeterminado). Es decir. no tiene que decir ""p para poner desde el registro sin nombre, solo p.

El valor predeterminado de clipboard no contiene unnamed, por lo que probablemente provenga de un poco de su configuración (o un complemento). El comando :verbose set clipboard? le mostrará el script que establece el valor actual. Si esto se hace en su archivo de configuración, es posible que no desee hacerlo cuando se está ejecutando bajo tmux. Por ejemplo:

if $TMUX == '' 
    set clipboard+=unnamed 
endif 

Alternativamente, puede haber alguna manera de que los casos de Vim-dentro- acceso tmux la selección GUI/portapapeles (por lo tanto trabajar con el registro * y/o unnamed en clipboard). Si está ejecutando Mac OS X, puede consultar my workaround wrapper que vuelve a habilitar el acceso al portapapeles para los procesos que se ejecutan dentro de una sesión tmux. Si está utilizando algún otro sistema operativo o GUI, necesitará averiguar cómo Vim normalmente hablaría con la GUI y por qué no funciona (por ejemplo, el valor de PANTALLA incorrecto en X11, posiblemente debido a la conexión a una sesión anterior que se está ejecutando). un shell que tiene un valor desactualizado).

+3

Tiene razón, mi .vimrc tenía el conjunto de portapapeles = línea sin nombre. Agregué el condicional y ahora funciona correctamente dentro y fuera de tmux. – Jason

+0

Todas las otras respuestas simplemente prueban aleatoriamente diferentes configuraciones sin tener en cuenta, ¡SOLO usted señala por qué! Gracias. – nn0p

+2

¿Debo instalarlo con la opción '--with-wrap-pbcopy-and-pbpaste' en brew? – nn0p

4

El complemento fakeclip hace que el registro del portapapeles se comporte como se esperaba en muchos terminales y tiene soporte para tmux/screen. ¿Lo estás usando? Puede resolver su problema.

Además, puede que le interese este consejo ... No es aplicable a su pregunta, pero sí a su relación. Dependiendo del tipo de sistema/terminal con el que ejecute tmux, es posible que necesite algunos ajustes en su .tmux.conf.Por ejemplo aquí es un extracto de mi .tmux.conf en OS X (con algunas instrucciones en los comentarios):

# To use pbcopy and pbpaste on OS X, get this wrapper and install 
# git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git 
# cd tmux-MacOSX-pasteboard/ 
# make reattach-to-user-namespace 
# mv reattach-to-user-namespace /usr/local/bin 
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above. 
set -g default-command "reattach-to-user-namespace -l /bin/bash" 
# #Next, create Ctrl-c and Ctrl-v mappings 
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy" 
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer" 
48

Aquí es lo que funciona para mí en vim/tmux/OSX:

  1. Instalar Homebrew
  2. instalar Reattach-a-usuario-espacio de nombres: brew install reattach-to-user-namespace
  3. en .vimrc: set clipboard=unnamed
  4. Dile tmux utilizar el sistema portapapeles: En .tmux.conf: set-option -g default-command "reattach-to-user-namespace -l bash"

Fuente: https://coderwall.com/p/j9wnfw

+2

Tenga en cuenta que [se desaconsejan las respuestas de solo enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info), las respuestas SO deberían ser el punto final de una búsqueda de una solución (vs. otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra

+6

para usuarios 'zsh' por supuesto reemplazan' bash' con 'zsh'. – nikola

+0

Recuerde reiniciar cualquier sesión de inicio de sesión (es decir, reinicie sus ventanas de iTerm/Terminal) después de hacer esto. – Momer

0

respuesta tardía, pero también podría ser que su .tmux.conf contiene la siguiente línea:

set -g set-clipboard off

combinado con a .vimrc que contiene

set clipboard=unnamed

Esto dará lugar a que vim intente usar un portapapeles que no está allí.

Cuestiones relacionadas