vim não pode executar o comando unix com:! devido a mudança de casca

8

Nossa empresa usa o sistema Red Hat Linux e aloca a todos uma conta em / home. Infelizmente, nosso sistema está usando tsch, o que não é favorável para mim. Além disso, como eu não tenho permissão de superusuário, não posso usar o comando chsh para mudar para bash para mim. Pior ainda, o ypchsh também não está disponível para mim. Então, finalmente, adiciono as seguintes linhas no .cshrc:

    bash
    echo $0

e configure o .bashrc apropriadamente (copiando do .cshrc original e corrigindo o erro de sintaxe necessário). Agora o aparente shell se torna bash (como pode ser mostrado no comando "echo $ 0").

Agora surge o problema:

Quando eu uso o vim para editar um arquivo cpp (por exemplo, Hello_World), e uso ":! g ++ -g Hello_World.cpp -o hw.out" no vim para compilar o arquivo, nenhum resultado será mostrado, e vim é sair com "bash" mostrado (como quando um terminal está aberto), mas sem o habitual "aperte uma tecla" para voltar ao meu trabalho no vim. Na pasta Hello_World.cpp, há um arquivo .Hello_World.cpp.swp, mas não hw.out. Quando vim Hello_World.cpp novamente, verifica-se que este arquivo cpp foi aberto.

No entanto, se eu g ++ o arquivo cpp na pasta, mas não usando vim e:!, tudo está OK. De fato, :! agora parece ser ilegal para o vim.

Se eu usar o tcsh original, tudo também está OK.

Como eu poderia corrigir esse erro curioso?

Obrigado pela sua gentil ajuda antecipadamente.

qing

BTW: Eu prefiro o bash ao tcsh principalmente devido a sua conveniência de HISTIGNORE e HISTCONTROL, embora tcsh também tenha configuração de histdup.

Eu achei o seguinte um pouco útil, mas ainda não satisfatório para o meu problema.

Como executar comandos Unix dentro do Vim?

    
por JQK 30.11.2012 / 17:41

3 respostas

8

Coloque isso no seu script .login:

setenv SHELL /bin/bash
exec bash -l

A primeira linha define a variável de ambiente SHELL. A segunda linha substitui o tcsh por bash , mas diz para ele ser executado como um shell de login (assim bash processará seu .profile etc). Você pode adicionar uma opção -i para torná-la interativa; não deveria ser necessário.

    
por 30.11.2012 / 17:58
2

O shell padrão para qualquer usuário é armazenado no arquivo / etc / passwd. O usuário pode alterar seu shell padrão para qualquer um dos shells listados em / etc / shells, emitindo o comando chsh . Consulte as páginas de manual do chsh (1) e shells (5) para mais informações.

Esta resposta é "mais correta" do que a abordagem de substituir o shell atual após o login, pois é desnecessário iniciar o shell indesejado em primeiro lugar. Essa abordagem é útil somente quando o administrador negligencia o arquivo / etc / shells e se esquece de incluir o bash nele (nunca).

    
por 04.12.2012 / 08:12
1

Obrigado por toda sua grande ajuda.

Antes de dar a solução final, eu escolho, tenho que apontar um erro na minha pergunta original. Meu .cshrc original tem as seguintes três linhas:

     bash
     source ~/.bashrc
     echo $0

Senti falta de digitar a segunda linha antes. Desculpe.

Agora, eu tentei esses dois métodos e os resultados são mostrados abaixo.

1) Método .vimrc

Se eu escrever

     bash
     source ~/.bashrc
     echo $0

em ~ / .cshrc

e

     set shell=/bin/bash

em ~ / .vimrc

sem nenhum arquivo ~ / .login, então vim e:! g ++ estão OK, mas:! gdb a.out tem algum erro. Além disso, "echo $ 0" dá "bash" mas "echo $ SHELL" dá "/ bin / tcsh". Eu não sei exatamente a diferença entre $ 0 e $ SHELL.

2) .login method

Se eu escrever

     setenv SHELL /bin/bash
     bash
     source ~/.bashrc
     echo $0

em .login

mas nem nada como "set shell = ..." em ~ / .vimrc nem "bash ..." em ~ / .cshrc, tudo está OK. Agora, "echo $ 0" dá "bash" e "echo $ SHELL" dá "/ bin / bash".

O bash na segunda linha pode ser substituído por "bash -l". Deve-se observar que, se eu substituí-lo por "exec bash" ou "exec bash -l", não poderei fazer login na minha conta. (O sistema automaticamente sai rapidamente.) Eu também não sei porquê.

Eu acho que o segundo método é ótimo. Eu agradeço muito sua ajuda.

    
por 02.12.2012 / 13:27