Agora vamos habilitar o copiar e colar com o mouse no
Vim. Entre nesse arquivo:
# vim /usr/local/share/vim/vim82/defaults.vim
No Vim instalado pelo gerenciador (no caso o apt-get) é nesse caminho:
# vim /usr/share/vim/vim81/defaults.vim
Mas em qualquer caso, procure pelo arquivo:
# find / | grep defaults.vim
(esse comando funciona na maioria das distribuições
Linux)
Procure as seguintes linhas que estarão aproximadamente a partir da linha 80 e troque mouse=a por mouse=r:
if has('mouse')
if &term =~ 'xterm'
set mouse=a #coloque r no lugar de a
else
set mouse=nvi #deixe como está
endif
endif
Salve e saia:
:wq
No Vim instalado pelo gerenciador são somente essas linhas abaixo porque na instalação do repositório o gerenciador já reconhece qual o X (Xfce, Kde, Gnome etc):
if has('mouse')
set mouse=a #coloque r no lugar de a
endif
Tem alguns que comentam as linhas acrescentando - (aspas duplas) no início do bloco. Eu prefiro setar "r" no lugar de "a".
Teste abrindo um arquivo com o Vim, selecione usando o mouse e verá que o botão direito com a opção "Copiar" está habilitado e funcionará para copiar e colar no sistema inteiro tanto de fora como de dentro do Vim. Testei também copiando e colando dentro do Vim partes de sites da internet.
Copiei da internet o texto abaixo e colei no arquivo "teste" criado com o Vim, salvei e fechei o arquivo. Copiei e colei o texto acima do
rc.local, para não dar engano, e depois abri o arquivo "teste" e copiei e colei do Vim:
Viva o Linux - A maior comunidade
GNU/Linux da América ...
https://www.vivaolinux.com.br
E as opções normais do Vim para copiar e colar também funcionam:
- +y - copiar, funciona dentro e fora do Vim;
- +p - colar, mas somente dentro do Vim.
Caso queira, desfaça a troca, salve e saia e teste abrindo um arquivo com o Vim e verá que a opção "Copiar" do botão direito desabilitou e/ou o copiar não funciona mais do Vim para outro programa.
Você pode criar o arquivo
~/.vimrc ou
/etc/vimrc ou
/etv/vim/vimrc.local (dependendo da distribuição) e acrescentar as três linhas, mas algumas vezes funciona outras não.
Tenha cuidado ao alterar o
defaults.vim, somente altere o recomendado.
O problema de alterar o arquivo defaults,vim é que ao atualizar o Vim esse arquivo poderá ser substituído e a configuração volta ao padrão. Quando você perceber que o Vim não copia e cola mais com o mouse, deverá verificar o defaults.vim.
Isso acontece porque são várias distribuições, várias interfaces gráficas (Xfce, Gnome, Kde etc), vários shell, vários terminais etc, e isso vale para vários programas do Linux.
O vimrc em /etc/vim/vimrc aconselha criar o vimrc.local no Debian para configurações globais:
" Source a global configuration file if available
if filereadable("/etc/vim/vimrc.local")
source /etc/vim/vimrc.local
endif
Porém, eu testei setar com o /etc/vim/vimrc.local no Debian e a opção set mouse=r não funcionou, enquanto outras opções como, por exemplo, set number funcionou. Acredito que o padrão para todas distribuições é ~/.vimrc.
Outro exemplo, a opção set clipboard=unnamedplus funciona somente com o X11 e depende da interface gráfica utilizada.
No Debian com Gnome e uma versão diferente do Vim, a opção set mouse=r no arquivo /etc/vim/vimrc.local pode funcionar, mas no Debian com Xfce e outra versão do Vim (ou a mesma) pode não funcionar.
O próprio Vim explica no comentário da linha ~76 do código em defaults.vim e na documentação em
http://vimdoc.sourceforge.net/htmldoc/options.html#'mouse':
In many terminal emulators the mouse works just fine. By enabling it you
can position the cursor, Visually select and scroll with the mouse.
Em muitos emuladores de terminal, o mouse funciona perfeitamente. Ao ativá-lo, você pode posicionar o cursor, selecionar visualmente e rolar com o mouse.
Dependendo, mesmo com mouse=a pode-se selecionar, copiar e colar com o mouse usando a tecla shift junto.
Isso acontece porque o Linux tem duas áreas de transferência (clipboard) distintas. Uma é a área de transferência de seleção (registro * no Vim), a outra é para o sistema (o que inclui crtl c, crtl v, o mouse, etc [registro + no Vim]).
Grosso modo, uma das áreas de transferência é a do programa, no caso o Vim, e a outra área de transferência é a do sistema, vamos por assim dizer. E quando você seleciona e copia alguma coisa, uma hora vai para uma área, outra hora vai para outra, dependendo de onde você está copiando (do programa ou do sistema) e depende também das configurações feitas no programa e no sistema.
Resumindo a ópera: somente alterando o arquivo defaults.vim temos certeza de que as configurações das áreas de transferência funcionam globalmente e podemos usar o mouse para selecionar, copiar e colar de e no Vim. Lembrando que esse arquivo, caso você instalou o Vim pelo gerenciador de pacotes, ao atualizar ele pode mudar automaticamente e você terá que refazer a configuração, mas daí você perceberá quando o Vim deixar de copiar e colar. Porém, não precisa se preocupar, a configuração feita durará bastante tempo.
O Vim é um editor de texto projetado para sistemas UNIX (mas tem para Windows, Macintosh etc), no caso do Linux você pode instalar diferentes interfaces gráficas (Xfce, KDE, Gnome etc), por isso o Vim vem no padrão sem o popular crtl c crtl v (o que inclui o mouse) habilitado para o sistema.
Você pode transformar o Vim num IDE (Ambiente de Desenvolvimento Integrado), se quiser.
Muitas pessoas não gostam do Vim porque "dá trabalho" aprender a usar ele, mas não é difícil, pode dar um pouco de trabalho e esforço, porém, depois não esquece mais e a produtividade e a rapidez aumentam.
Veja a documentação do Vim sobre o clipboard e o mouse, que confirma praticamente tudo o que foi dito:
'mouse' string (default "", "a" for GUI, MS-DOS and Win32)
global
{not in Vi}
Enable the use of the mouse. Only works for certain terminals
(xterm, MS-DOS, Win32 |win32-mouse|, QNX pterm, *BSD console with
sysmouse and Linux console with gpm). For using the mouse in the
GUI, see |gui-mouse|.
The mouse can be enabled for different modes:
n Normal mode
v Visual mode
i Insert mode
c Command-line mode
h all previous modes when editing a help file
a all previous modes
r for |hit-enter| and |more-prompt| prompt
Normally you would enable the mouse in all four modes with:
:set mouse=a
When the mouse is not enabled, the GUI will still use the mouse for
modeless selection. This doesn't move the text cursor.
See |mouse-using|. Also see |'clipboard'|.
Note: When enabling the mouse in a terminal, copy/paste will use the
"* register if there is access to an X-server. The xterm handling of
the mouse buttons can still be used by keeping the shift key pressed.
Also see the 'clipboard' option.
e
'clipboard' 'cb' string (default "autoselect,exclude:cons|linux"
for X-windows, "" otherwise)
global
{not in Vi}
{only in GUI versions or when the |+xterm_clipboard|
feature is included}
This option is a list of comma separated names.
These names are recognized:
unnamed When included, Vim will use the clipboard register '*'
for all yank, delete, change and put operations which
would normally go to the unnamed register. When a
register is explicitly specified, it will always be
used regardless of whether "unnamed" is in 'clipboard'
or not. The clipboard register can always be
explicitly accessed using the "* notation. Also see
|gui-clipboard|.
unnamedplus A variant of "unnamed" flag which uses the clipboard
register '+' (|quoteplus|) instead of register '*' for
all operations except yank. Yank shall copy the text
into register '+' and also into '*' when "unnamed" is
included.
Only available with the |+X11| feature.
Availability can be checked with:
if has('unnamedplus')
autoselect Works like the 'a' flag in 'guioptions': 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 or put the
selected text on the clipboard used by the selection
register "*. See |guioptions_a| and |quotestar| for
details. When the GUI is active, the 'a' flag in
'guioptions' is used, when the GUI is not active, this
"autoselect" flag is used.
Also applies to the modeless selection.
autoselectml Like "autoselect", but for the modeless selection
only. Compare to the 'A' flag in 'guioptions'.
html When the clipboard contains HTML, use this when
pasting. When putting text on the clipboard, mark it
as HTML. This works to copy rendered HTML from
Firefox, paste it as raw HTML in Vim, select the HTML
in Vim and paste it in a rich edit box in Firefox.
You probably want to add this only temporarily,
possibly use BufEnter autocommands.
Only supported for GTK version 2 and later.
Only available with the |+multi_byte| feature.
exclude:{pattern}
Defines a pattern that is matched against the name of
the terminal 'term'. If there is a match, no
connection will be made to the X server. This is
useful in this situation:
- Running Vim in a console.
- $DISPLAY is set to start applications on another
display.
- You do not want to connect to the X server in the
console, but do want this in a terminal emulator.
To never connect to the X server use:
exclude:.*
This has the same effect as using the |-X| argument.
Note that when there is no connection to the X server
the window title won't be restored and the clipboard
cannot be accessed.
The value of 'magic' is ignored, {pattern} is
interpreted as if 'magic' was on.
The rest of the option value will be used for
{pattern}, this must be the last entry.
Referências: