Questão vim colorschemes não aparecem corretos ao usar o sudoedit


Eu tenho tentado ser um bom sysadmin e usar o sudoedit, ao invés do sudo vim, ou sudo -i; vim, ao fazer mudanças nos arquivos de root (ex / etc / profile), mas o meu esquema de cores vim não parece para aparecer direito ao usar o sudoedit.

O colorsceme está carregando corretamente, (marcado via: color). Eu confirmei que não está puxando o esquema de cores para raiz, como o problema aparece ao fazer um sudoedit da raiz também, as cores são diferentes, mesmo que mostre o mesmo esquema.

Usando:

  • 12,04 LTS
  • vim: 2: 7.3.429-2ubuntu2.1
  • sudo: 1.8.3p1-1ubuntu3.4

Edições:

VIM está sendo executado:

ubuntu@ip-10-0-0-104:~$ ps -f -u ubuntu
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu    4433  4345  0 19:18 ?        00:00:00 sshd: ubuntu@notty
ubuntu    6109  6021  0 20:47 ?        00:00:00 sshd: ubuntu@pts/0
ubuntu    6110  6109  0 20:47 pts/0    00:00:00 -bash
ubuntu    6233  6232  0 20:48 pts/0    00:00:00 /usr/bin/vim /var/tmp/profile.XXQiLoee
ubuntu    6322  6234  0 20:49 ?        00:00:00 sshd: ubuntu@pts/1
ubuntu    6323  6322  0 20:49 pts/1    00:00:00 -bash
ubuntu    6461  6323  0 20:50 pts/1    00:00:00 ps -f -u ubuntu

Aqui está um exemplo do que estou falando. (outras luzes não funcionam tão bem, mas imaginei que uma foto seria suficiente)

vim vs sudoedit


1
2018-01-15 16:45


origem


Funciona quando você simplesmente chama vim (sudo -i Seguido por vim)? Você precisa primeiro configurar o vim como root. Os esquemas de cores para o vim precisam estar em / root - Panther
Sim, é isso que eu quis dizer com chequei correndo sudoedit da raiz. Eu defino um esquema de cores para raiz e, quando executo o vim como raiz, as cores parecem corretas. Quando executo o sudoedit como root, o esquema de cores é carregado, mas as cores não estão corretas. - VTC
Funciona quando você liga sudo vim ? - Panther
Sim. As cores de cada esquema estão corretas, a menos que você use sudoedit ou sudo -e. - VTC
Existem algumas soluções aqui: serverfault.com/questions/203988/… . Meu palpite é que sudoedit e sudi -e são callinv vi e não vim. - Panther


Respostas:


A diferença nas suas capturas de tela é devida ao uso do Vim filetype para os dois arquivos sendo editados. A razão para isso é provavelmente o nome do arquivo temporário que sudoedit cria ao editar.

Ao comparar as diferenças de destaque da sintaxe entre duas instâncias do Vim, a primeira coisa a procurar é a filetype variável que o Vim define automaticamente. Você pode verificar o que o atual filetype é executando

:set filetype?

no Vim. Você também pode consultar a configuração como ft abreviado. O Vim deve mostrar um resultado na linha de status, como

  filetype=sh

Vim tem um grande script de heurística para definir filetype automaticamente com base no nome do arquivo ou, às vezes, no conteúdo do arquivo. Se o nome do arquivo for /etc/profile, por exemplo, o Vim define o filetype para sh automaticamente.

Quando você usa sudoedit editar /etc/profile, um arquivo temporário é criado, como mostrado na ps listagem. Como o nome desse arquivo não corresponde a nenhuma das regras de script do Vim, ele tenta definir filetype com base no conteúdo. Com base na imagem, eu diria que o Vim definiu o filetype para conf, significando um arquivo de configuração genérico.

Soluções possíveis

Manual

Existem algumas maneiras de lidar com isso. Primeiro, você pode definir filetype manualmente toda vez que você editar um arquivo. Forçar sh sintaxe a ser usada, executar

:set filetype=sh

As regras de realce de sintaxe devem ser recarregadas e aplicadas imediatamente.

Sintaxe

Outra maneira é adicionar uma dica ao Vim no conteúdo de arquivos que você edita com freqüência que um determinado filetype deve ser definido. Por exemplo, se a primeira linha de um arquivo for #!/bin/sh, O Vim usará a sintaxe apropriada, independentemente do nome do arquivo. Note que isso faz /etc/profile parece um shell script executável mesmo que não seja, então você pode ou não querer fazer algo assim em seu sistema.

Vim Modelines

Uma terceira forma é forçar o Vim a definir o filetype variável usando o que o Vim chama de "modelines". Vejo :help modeline Para maiores informações. Isso envolve adicionar um comentário ao seu arquivo que contém uma string que o Vim pode analisar para comandos. De volta ao seu exemplo com /etc/profile, adicionando um comentário como

# vim: set filetype=sh

instruiria o Vim a definir o filetype corretamente quando o arquivo é editado, independentemente do seu nome.


2
2018-05-14 18:08





Se você sempre tiver comportamentos de cores diferentes entre ids de usuário diferentes, sempre primeiro digite "which vi" e veja se está lidando com o primeiro. E então olhe para o seu .vimrc em seguida assumindo que é vim. Se não, certifique-se de ter isso em seu .bashrc

alias vi='vim'

0
2018-02-11 06:16