vim colorschemes não aparecem corretos ao usar o sudoedit

1

Eu tenho tentado ser um bom sysadmin e uso o sudoedit, ao invés do sudo vim, ou sudo -i; vim, quando faço alterações em arquivos de propriedade root (ex / etc / profile), mas meu vim colorscheme doesn parece aparecer corretamente 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:

O 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)

    
por VTC 15.01.2014 / 17:45

2 respostas

2

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

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

:set filetype?

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

  filetype=sh

O Vim tem um script grande de heurística para definir o 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 definirá o filetype para sh automaticamente.

Quando você usa sudoedit para editar /etc/profile , um arquivo temporário é criado, conforme mostrado na lista ps . Como o nome desse arquivo não corresponde a nenhuma das regras de script do Vim, ele tenta definir o filetype com base no conteúdo. Com base na captura de tela, imagino que o Vim tenha definido o filetype para conf , ou seja, 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 editar um arquivo. Para forçar a sintaxe sh a ser usada, execute

:set filetype=sh

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

Sugestões de sintaxe

Outra maneira é adicionar uma sugestão ao Vim no conteúdo dos arquivos que você edita com freqüência e que um filetype específico 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. Observe que isso faz com que /etc/profile pareça um script de shell executável, mesmo que não seja, portanto, você pode ou não querer fazer algo assim em seu sistema.

Vim Modelines

Uma terceira maneira é forçar o Vim a definir a variável filetype usando o que o Vim chama de "modelines". Consulte :help modeline para mais 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 for editado, independentemente de seu nome.

    
por Mike Miller 14.05.2014 / 20:08
0

Se você sempre tiver diferentes comportamentos de cores entre diferentes ids de usuário, 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'
    
por Miles Gillham 11.02.2018 / 07:16