Configurando o Vim com o clienterver e a área de transferência

3

No OS X, tenho vim trabalhando muito bem com o homebrew. A instalação homebrew padrão compila o vim com esses sinalizadores.

./configure
  --prefix=/usr/local
  --mandir=/usr/local/Cellar/vim/7.4.161/share/man
  --enable-multibyte
  --with-tlib=ncurses
  --enable-cscope
  --with-features=huge
  --with-compiledby=Homebrew     
  --enable-rubyinterp
  --enable-pythoninterp
  --enable-gui=no
  --without-x

Esta instalação funciona perfeitamente com a área de transferência do sistema usando isso no meu vimrc:

if has("clipboard")
    set clipboard=unnamed
endif

O Homebrew também tem sinalizadores para instalar o --with-client-server se você usar isso, ele compila o vim com:

./configure
  --prefix=/usr/local
  --mandir=/usr/local/Cellar/vim/7.4.161/share/man
  --enable-multibyte
  --with-tlib=ncurses
  --enable-cscope
  --with-features=huge
  --with-compiledby=Homebrew     
  --enable-rubyinterp
  --enable-pythoninterp
  --enable-gui=gtk2

Isso compila o vim com +clientserver e +clipboard . Executando set clipboard? retornando unnamed ainda agora a integração com a área de transferência do sistema não funciona, mesmo quando prefixando comandos com "+ ou "* .

Existe uma maneira de ter esses dois recursos funcionando com uma única instalação vim?

EDITAR:

Depois de mais algumas pesquisas, acredito que isso seja um problema no Mac OS X, pois a área de trabalho do sistema não está sendo sincronizada corretamente com o servidor X11. Eu encontrei uma pergunta semelhante aqui que lhe dá as configurações necessárias para configurar a sincronização da área de transferência com o X11. Há também um gui para isso nas versões mais novas.

Infelizmenteissonãofuncionou.Euacreditoqueestácoberto aqui em um relatório de bug aberto no rastreador xquartz. Também parece que isso pode ter sido um problema para um tempo .

    
por Keith Smiley 26.02.2014 / 16:11

1 resposta

2

Eu descobri os problemas aqui que pareciam levar a que isso não funcionasse. Primeiramente, eu tinha um ~/.Xdefaults e ~/.Xmodmap que são apenas excessivos de usar os mesmos dotfiles em distribuições Linux. Enquanto nenhum destes parece mexer com qualquer configuração da área de transferência diretamente, removê-los parecia importar.

Definir as opções de sincronização de papelão no X11 é obrigatório. Eu finalmente decidi sobre essas configurações:

# Clipboard syncing
defaults write org.macosforge.xquartz.X11 sync_clipboard_to_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_clipboard -boolean true
defaults write org.macosforge.xquartz.X11 sync_pasteboard_to_primary -boolean true
defaults write org.macosforge.xquartz.X11 sync_primary_on_select -boolean false

# Run xterm by default (without this vim's clipboard doesn't work)
defaults write org.macosforge.xquartz.X11 app_to_run -string "/opt/X11/bin/xterm"

# Set default shell
defaults write org.macosforge.xquartz.X11 login_shell -string "/usr/local/bin/zsh"

O xterm em execução por padrão é obrigatório. O X11 não parece querer compartilhar sua área de transferência com a área de trabalho do OS X até que o xterm tenha sido executado pelo menos uma vez. Ele nem precisa ser aberto, só tem que ter executado esta sessão. Esta configuração é o padrão para o X11, mas algumas pessoas o alteram para que o xterm não inicie toda vez que ele iniciar o X11. Se você executar o vim com +clientserver pela primeira vez antes de o XQuartz / X11 abrir, ele irá ignorar esta configuração quando abrir o X11. Se o xterm não for executado antes de você iniciar o vim, as pranchetas não serão sincronizadas e você terá que reiniciar o vim para corrigi-lo. Eu escolhi abrir o XQuartz por padrão toda vez que eu logar e escondê-lo.

Você precisa configurar a área de transferência do vim corretamente. Essas configurações funcionam:

if has("clipboard")
  set clipboard=unnamed " copy to the system clipboard

  if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
  endif
endif

A adição de unnamedplus às configurações da área de transferência usa os dois registros * e + para cada yank. Essas configurações garantem que a área de transferência seja definida como unnamed se apenas +clipboard for configurada e como unnamed,unnamedplus se você tiver +xterm_clipboard . Eu encontrei esta opção aqui .

Então você pode simplesmente instalar o Vim via homebrew com:

brew install vim --with-client-server

Infelizmente, o X11 ainda não parece funcionar de forma consistente, por isso desisti desta configuração.

    
por 31.03.2014 / 23:45

Tags