Como devo editar arquivos em uma rede com o Vim?

13

Atualmente, estou fazendo isso usando SSHing em um servidor e executando o Vim no servidor. Isso tem o benefício de não precisar lidar com a sintaxe pesada de abrir arquivos de um servidor remoto pelo SCP e, mais importante, de poder navegar rapidamente rapidamente no sistema de arquivos do servidor. Por outro lado, possui lag, o que dificulta a edição.

Qual é a maneira canônica de editar muitos arquivos remotos?

jcora
fonte
6
Exatamente como você está fazendo isso.
Ignacio Vazquez-Abrams
Se vimestiver exibindo atraso, isso provavelmente indica um problema na sua rede e não no seu fluxo de trabalho.
Joseph R.
ssh [email protected]; vim / etc / somefile - eu entrar, e, em seguida, o fogo até Vim
jcora
Na verdade, é com a rede. Quando pressiono uma tecla, ele envia um pacote da Europa para os EUA, onde a instância do Vim que estou usando está realmente em execução.
Jcora # 23/13
Você também pode fazer ssh [email protected] vim /etc/somefile(observe a ausência de ;).
terdon

Respostas:

26

Você pode usar o SSHFS para montar uma casa remota em uma pasta local. Tem a vantagem de usar a infraestrutura atual e baixa latência do vim local.

Mircea Vutcovici
fonte
1
melhor maneira imo. não só baixa latência, mas apenas ter que manter um vimrc
exussum
20

Você pode editar remotamente com um vim local ou gvim.

:e scp://[email protected]/~/myfiles/whatever.file

scpé um protocolo de cópia segura . Ele se autentica da mesma maneira que ssh, portanto, sua chave ssh precisa estar disponível etc. Existem vários outros protocolos suportados (consulte :help netrw-externapp), mas o scp é provavelmente o mais fácil se você já estiver usando o ssh no mesmo local.

Você pode navegar nos diretórios dessa maneira, apenas verifique se o caminho termina com a /. Caso contrário, o vim o transforma em um novo arquivo.

:wgrava automaticamente o arquivo via scp. Se a gravação falhar por algum motivo, você deve notar, pois será um tipo de coisa "shell retornou 1" na barra de status. No entanto, tenha cuidado: se você não perceber, o vim não sabe e isso pode ter consequências - por exemplo, se você sair agora, não será um aviso. É particularmente fácil perder isso se você usa :wamuito; Essa é a única ressalva que tenho.

Para os documentos oficiais, consulte :help netrw.

Cachinhos Dourados
fonte
+1 Eu estava prestes a escrever isso. O plugin netrw (que geralmente é instalado por padrão) tem uma grande variedade de maneiras de ler arquivos remotos.
Greg Hewgill 23/10
Eu estava me referindo a esta opção quando eu disse: "Isto tem a vantagem de não ter de lidar com pesado sintaxe de arquivos de abertura de um servidor remoto através de SCP, e, mais importante, ser capaz de realmente navegar rapidamente sistema de arquivos do servidor" Desta forma, parece muito limitado para mim.
Jcora # 23/13
1
Para ser justo, sua pergunta originalmente não mencionou "servidor remoto por SCP", que foi editado mais tarde.
Greg Hewgill
@ GregHewgill: Obrigado por essa observação, pois estou um pouco confuso - este é o método mais simples e direto para propósitos gerais (sem ofensa ao SSHFS!). Se anexar uma URL a um caminho de arquivo é relativamente complicado, estou curioso para saber como a tarefa que está sendo executada exige que alguém se sente com um editor para fazer isso ... esp. desde que você possa apenas seta o comando. Mas cada um na sua.
Goldilocks
@GregHewgill Sim, eu sei, escrevi a pergunta no meu telefone enquanto me movia, então deixei algumas coisas de fora sem querer. Cachinhos dourados, abro e fecho arquivos o tempo todo. Navegue também no sistema de arquivos e abra a partir daí. Anexar um caminho URL + era mais complicado do que apenas "estar lá".
jcora
2

Eu usaria rsync. Transfere apenas o que mudou. Igual a:

rsync -e ssh -va remoteuser@remotehost:remotedir .

depois edite os arquivos localmente como desejar. Zero lag. Você pode inspecionar todos os arquivos antes de enviá-los:

rsync -e ssh -va . remoteuser@remotehost:remotedir

Suponho que você primeiro crie seu diretório local e faça cdisso. Você também pode lidar com a remoção de arquivos, mas tenha muito cuidado com isso, porque executar isso no diretório errado pode destruir uma árvore de diretórios inteira.

rsync -e ssh -va --delete . remoteuser@remotehost:remotedir

O que faço é executá-lo no "modo seco" primeiro, usando o sinalizador 'n', assim:

rsync -e ssh -van --delete . remoteuser@remotehost:remotedir

Ele relatará o que teria feito, se fosse real. Se estiver satisfeito com a lista relatada, eu a executo novamente e remova o sinalizador 'n'.

O rsync é muito eficiente. Existem várias outras bandeiras também. É bastante sofisticado.

Mike
fonte
0

Pode ser que você tenha nomeado a maneira mais apropriada - maneira SSH, mas ainda dependendo da própria natureza dos arquivos editados, você pode alocar uma pequena partição, compartilhá-la e colocá-los lá, é claro, se a política de segurança permitir essa ação. Para esta sugestão, você pode usar o NFS ou o Samba com mais facilidade, mas ainda editar o arquivo de teste é uma concepção geral no UNIX e pode ser que você precise mantê-lo da maneira que faz atualmente.

VVelev
fonte