Acceso al contenido del portapapeles en varias instancias de Vim desde la terminal


Vim (Vi IMproved) es uno de los editores de texto más favoritos entre los programadores. Tiene sus propias especialidades en la realización de diferentes operaciones con comandos de mano cortos.

Por ejemplo, para copiar el texto resaltado usamos el comando "y" y "x" para cortar el mismo. Pero, de forma predeterminada, no se puede acceder al contenido del portapapeles de vim (y no gVim) después de cerrar las instancias de vim.

Vim usa el registro "+" para referirse al portapapeles del sistema. Puede ejecutar "vim –version" y si no puede ver algo como "+ xterm_clipboard" y en su lugar "xterm_clipboard", el contenido del portapapeles interno no estará disponible fuera de vim.

Para acceder al contenido del portapapeles de vim, debe instalar el paquete gvim. GVim es un modo GUI para el editor vim donde la opción del portapapeles está habilitada de forma predeterminada.

# yum install -y gvim

A continuación, habilite el repositorio RPMForge para instalar el paquete parcellite. Parcellite es un administrador de portapapeles liviano, pequeño y gratuito para Linux.

# yum install -y parcellite

Una vez instalado, ejecute el siguiente comando. Donde el argumento "&" se usa para enviar parcellite para que se ejecute como un proceso en segundo plano.

# parcellite &

Compruebe si la opción está habilitada en gvim.

# gvim --version

Asegúrese de tener la opción "+ xterm_clipboard" mostrada en la salida como se muestra a continuación.

VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr  5 2012 10:12:08)
Included patches: 1-411
Modified by <[email protected]>
Compiled by <[email protected]>
Huge version with GTK2 GUI.  Features included (+) or not (-):
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+cryptv +cscope +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic 
+emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path 
+float +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand 
+jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap 
+menu +mksession +modify_fname +mouse +mouseshape +mouse_dec +mouse_gpm 
-mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +multi_byte 
+multi_lang -mzscheme +netbeans_intg -osfiletype +path_extra +perl +postscript 
+printer +profile +python +quickfix +reltime +rightleft -ruby +scrollbind 
+signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax 
+tag_binary +tag_old_static -tag_any_white -tcl +terminfo +termresponse 
+textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual 
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup 
+X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save

Abra el archivo .bashrc del usuario.

# vim ~/.bashrc

Y agregue el alias y guarde el archivo (presione "i" para insertar la línea y presione ESC, luego ejecute: wq para guardar y salir).

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vim='gvim -v'
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

Este alias es una función incorporada que se utiliza para pasar de un comando a otro. Por lo tanto, cada vez que se emite el comando vim, el alias correspondiente va a gvim con el portapapeles habilitado de forma predeterminada.

Ahora edite su archivo ".vimrc" de una manera similar (en caso de que no tenga un archivo .vimrc, genere uno de esos archivos y vuelva aquí.

# vim ~/.vimrc

Agregue la siguiente línea y guarde el archivo.

autocmd VimLeave * call system("echo -n $'" . escape(getreg(), "'") . "' | xsel -ib")

Ahora abra cualquier archivo en vim y resalte la porción de texto (usando el comando "v") y presione "+ y". Intente pegar en cualquier lugar fuera de vim (después de cerrar o sin cerrar vim) y listo.

Ejecute el siguiente comando para generar un archivo .vimrc (omita esta parte si ya tiene uno).

# cd   [This will put you in home directory]       
# vim .vimrc

En vim, ejecute lo siguiente después de presionar la tecla ESC (en vim, todos los comandos se ejecutan después de presionar la tecla ESC, lo que lo pone en modo de comando).

:r $VIMRUNTIME/vimrc_example.vim 
:w