Buffer de pasta vim do sistema no runlevel 3

3

Estou um pouco envergonhado de fazer essa pergunta, mas esse tópico parece ser particularmente difícil de pesquisar.

Nos sistemas Linux eu quase exclusivamente uso o terminal e acesso os sistemas (do macOS na maioria das vezes) usando o SSH através de um emulador de terminal.

No sentido geral, copiar e colar trechos de código e erros de logs, etc., é um problema complicado para atravessar o buffer em sistemas, quando um multiplexador de terminal está envolvido, e isso geralmente é obtido copiando através do próprio terminal emulador recurso de seleção e usar o buffer de pasta do sistema operacional do cliente. Esta questão não é sobre isso.

Meu problema é quando eu tenho um grande número de instâncias de vim abertas em um único servidor Linux. Estou no nível de execução 3 e não executo uma GUI. Não há xclip disponível para mim, principalmente porque o X não está instalado.

Quando estou nesse fluxo de trabalho, acho necessário arrancar partes de arquivos e colá-los em outros vims na mesma caixa de remoção. Os buffers de cópia / colagem + e * do Vim não funcionam. (a opção de compilação da área de transferência no vim não está habilitada nesses sistemas)

No entanto, o que funciona é se eu arranco algum texto em uma instância vim, fecho e abro outra instância vim, depois colando trabalhos. Então, algo sobre sair do vim persiste no buffer em algum lugar. Eu acho que se eu pudesse ter o que quer que este sistema funcione em tempo real sem ter que fechar o vims, isso seria ótimo. Eu gostaria de evitar a necessidade de colocar em camadas uma ligação em yanks e exclusões para implementar minha própria implementação de yank / paste.

    
por Steven Lu 16.03.2018 / 23:13

2 respostas

5

Este é o arquivo .viminfo ( :h viminfo ).

Quando você sai do vim, ele grava o estado atual, como o histórico de comandos, e registra valores nesse arquivo. Quando ele inicia, ele lê o arquivo e restaura o estado que ele descreve. Isso significa que sucessivas sessões vim (parecem) compartilham algum estado, mas as concorrentes não.

Você pode reler à força o arquivo viminfo com o :rv / :rviminfo comando e escreva manualmente com :wv . Então y : wv em um editor, e : rv p no outro irá funcionar, mas haverá efeitos colaterais: todos seus valores de registro e histórico de comandos podem ser redefinidos, e muitas outras coisas, que podem ou não ser importantes para você.

Isso também pode ser uma vantagem: você pode usar o intervalo completo de registros para obter vários buffers de cópia entre os editores, que a área de transferência do sistema não fornece. Por outro lado, não é muito conveniente, a menos que você revincule y para fazer isso automaticamente, e p você provavelmente não quer ler o arquivo toda vez. Eu tenho lido / escrito viminfo ligado aos comandos do líder, mas isso só me salva um pressionamento de tecla (e parece que você o usaria com mais frequência).

Existem algumas outras abordagens que você pode usar, como paginar manualmente para um arquivo específico

    
por 16.03.2018 / 23:39
1

Como prometido:

O script específico do Linux (meu $HOME/util está no meu $PATH ):

~/util ❯❯❯ cat linux_pb/pbcopy                                         ✘ 130 master b28083b $ ◼
#!/bin/bash

# pbcopy impl for linux!
# pipe the stdin to a file using cat. Not using bash builtins due to concerns
# about NULs.

FILE="$HOME/.clipboard"
touch $FILE
chmod 600 $FILE
cat > $FILE
~/util ❯❯❯ cat linux_pb/pbpaste                                              master b28083b $ ◼
#!/bin/bash

# pbpaste impl for linux!
# just use the content of the file.

cat ~/.clipboard

As ligações do vim:

vnoremap <silent> <Leader>y :w !pbcopy<CR><CR>
" the leader y works like normal yy (but for my clipboard)
nnoremap <silent> <Leader>y :.w !pbcopy<CR><CR>
nnoremap <Leader>p :read !pbpaste<CR>

O script de alias do shell idempotente (eu fonte este script de alias do bash e zsh):

if [ "$(uname)" = Linux ] && ! [[ "$PATH" = *"/linux_pb"* ]]; then
    PATH="$PATH:$HOME/util/linux_pb"
fi

Provavelmente vou incrementar ainda mais a configuração do Linux quando começar a usar um linux real com o X, para que eu também possa tirar proveito do buffer de colar dele também. Seria necessário algum mecanismo para criar programas pbcopy e pbpaste semelhantes a este .

A abordagem é de uniformidade no nível do programa, então o Vim pode alavancar a funcionalidade exatamente como agora sou capaz de usar a partir do shell.

    
por 09.04.2018 / 05:19

Tags