Estou acostumado ao Emacs, mas estou testando o Vim para ver qual deles eu gosto mais.
Uma coisa que eu gosto no Emacs é a capacidade de executar um terminal dentro do Emacs. Isso é possível dentro do Vim? Eu sei que você pode executar comandos do Vim, mas gostaria de poder executar um terminal dentro de uma guia.
:! <command>
que você está procurando?:term
comando que abre um novo terminal em uma nova janela dividida. Se não funcionar, verifiquevim --version | grep -o .terminal
se esse recurso está disponível (+terminal
) ou indisponível (-terminal
).Respostas:
Eu recomendaria definitivamente
screen
algo assim. O Vim é um editor de texto, não um shell.Eu usaria Ctrl+ASpara dividir a janela atual horizontalmente, ou na tela do Ubuntu e em outras versões corrigidas, você pode usar Ctrl+A|(pipe) para dividir verticalmente. Em seguida, use Ctrl+ATab(ou equivalente em alguns sistemas, Ctrl+ACtrl+Ique pode ser mais fácil digitar) para alternar entre as janelas. Existem outros comandos para alterar o tamanho e a organização das janelas.
Ou um uso menos avançado
screen
é apenas para abrir várias janelas de tela cheia e alternar entre elas. É o que normalmente faço, só uso o recurso de tela dividida ocasionalmente.A pergunta do GNU Screen Survival Guide tem várias dicas boas, se você não estiver familiarizado com o seu uso.
fonte
Desatualizado de agosto de 2011
Confira Conque Shell (também no GitHub ). Permite executar qualquer programa interativo dentro do vim, não apenas um shell.
fonte
:ConqueTerm bash <CR>
,vim <CR>
,:ConqueTerm bash
.... o horror recursiva !!Não sei exatamente o que você está tentando alcançar (nunca usei o Emacs), mas você pode executar comandos no Vim digitando:
E se você quiser digitar vários comandos ou brincar em um shell por um tempo, sempre poderá usar:
Quando o comando ou shell terminar, você poderá pressionar Enterpara retornar à sua janela do editor
O Vim é intencionalmente leve e carece da capacidade de executar tarefas não editoriais, assim como executar um shell completo dentro de um painel / guia do Vim, mas, como mencionado acima, existem complementos de terceiros, como o vim-shell, que permitem a você para fazer esse tipo de coisa.
Normalmente, se eu quiser alternar entre o Vim e meu shell (Bash), basta pressionar CTRL+ Zpara pausar o processo do Vim, brincar no meu shell e digitar 'fg' quando desejar voltar ao Vim - mantendo meu editor e meu concha agradável e separado.
fonte
:r! command [ENTER]
mencionado nos comentários.A maneira que eu contornar isso é:
fg
.fonte
:!bash
é uma maneira mais agradável de fazer isso # 0:!bash
melhor do queCtrl+z
? (Basta saber)Ctrl+Z
, por exemplo, você pode mover para outra pasta,ls
entãogit status
, etc.Ctrl+Z
é uma "pausa", você pode "continuar" comfg
. Mas com:! Bash, como eu sei até agora, você só pode executar um único comando de uma só vez, ou mesmo se você pode executar mais de um comando de uma vez, ainda não é conveniente. Portanto, em geral, 'Ctrl + Z' é muito melhorSe ativado na sua versão do Vim, um terminal pode ser iniciado com o
:term
comandoO suporte à janela do terminal foi adicionado ao Vim 8. É um recurso opcional que pode ser ativado ao compilar o Vim com o recurso + terminal. Se sua versão do Vim tiver suporte para terminal,
:echo has('terminal')
a saída será "1".Entrar
:term
entrará no modo Trabalho de Terminal , onde você poderá usar o terminal conforme o esperado.No modo Terminal-Job , pressione
Ctrl-W N
ouCtrl-\ Ctrl-N
alterna o modo para Terminal-Normal , o que permite que o cursor seja movido e comandos sejam executados de maneira semelhante ao modo Normal do Vim . Para voltar ao modo Trabalho de Terminal , pressionei
.Outras respostas mencionam funcionalidades semelhantes no Neovim.
fonte
i
após alternar do modo de navegação ctrl-wN. Este é um recurso matador mesmo no tmux e funciona no Windows também.:term
?brew install vim --override-system-vi
e:term
funciona perfeitamente. Obrigado por compartilhar!:vertical :term
dividirá verticalmente com o terminal na janela esquerda.:vertical :botright :term
dividirá verticalmente com o terminal na janela direita. Como alternativa, você pode:term ++curwin
criar um layout manual das janelas e usá-lo para abrir um terminal na janela ativa.:sh
depoisctrl+d
voltar (bash)Atualização :
Você pode mapear
ctrl+d
no vim para executar:sh
, o que permite alternar entre o bash e o vim rapidamente.noremap <C-d> :sh<cr>
fonte
ctrl+z
efg
sou um pouco mais rápido, já que você não precisa digitar:sh
nesse caso.:sh
se fizer o mapa. Depoisnoremap
, você pode apenasCtrl+D
do vim parash
, e como^D
é EOF, que finaliza osh
, para que você retorne ao vim. A única tecla pode alternar entresh
e vim.O principal novo recurso do Vim 8.1 é o suporte à execução de um terminal em uma janela do Vim.
:term
abrirá o terminal em outra janela dentro do Vim.fonte
exit
vai sair do terminal, em seguida, usar:q
para fechar a janelaEventualmente, um
:terminal
comando nativo foi adicionado ao vim em 2017.Aqui está um trecho do : readme do terminal :
fonte
:bn
como de costume. Não há necessidade de matar o terminal e que não é um ponto de não retorno :)Essa pergunta é bastante antiga, mas para quem a encontra, há uma nova solução possível: o Neovim contém um emulador de terminal de primeira classe completo, que faz exatamente o que o ConqueTerm tentou. Simplesmente corra
:term <your command here>
.<C-\><C-n>
sairá do modo termo novamente para o modo normal. Se você é como eu e prefere que o escape ainda saia do modo de termo, você pode adicioná-lo ao seu nvimrc:E, em seguida, pressionar ESC duas vezes sairá do modo terminal novamente para o modo normal, para que você possa manipular o buffer no qual o comando em execução está gravando.
Embora tenha em mente, como o nvim está em desenvolvimento pesado no momento em que estou postando esta resposta, outra maneira de sair do modo terminal pode ser adicionada. Como Ctrl+\Ctrl+nmuda para o modo normal a partir de praticamente qualquer modo, não espero que essa resposta fique errada, mas saiba que, se não funcionar, essa resposta pode estar desatualizada.
https://github.com/neovim/neovim
fonte
:term
Entretanto, esse recurso foi adicionado recentemente no Vim 8.1, que, a partir desta postagem, foi lançado recentemente, portanto, você pode precisar atualizar para poder usá-lo.
fonte
Sei que não estou respondendo diretamente à pergunta, mas acho que é uma boa abordagem. Ninguém mencionou o tmux (ou pelo menos não como uma resposta independente). O Tmux é um multiplexador terminal como tela. A maioria das coisas pode ser feita nos dois multiplexadores, mas no afaik tmux é mais fácil de configurar. No momento, o tmux também está sendo desenvolvido mais ativamente do que a tela e existe um ecossistema muito grande em torno dela, como ferramentas que ajudam a configuração, etc.
Também para o vim, existe outro plugin: o ViMUX , que ajuda muito na interação entre as duas ferramentas. Você pode chamar comandos com:
:call VimuxRunCommand("ls")
Esse comando cria uma pequena divisão horizontal abaixo do painel atual do vim.
Também pode permitir que você execute a partir de um prompt, caso não queira executar o comando inteiro:
<Leader>vp :VimuxPromptCommand<CR>
Como não era suficiente, existem pelo menos 6 'plugins específicos de plataforma':
g:vroom_use_vimux
Aqui está um bom "caso de uso": Testes sob demanda usando o Vimux e o Turbux com Spork e Guard
fonte
Alguém já sugeriu https://github.com/Shougo/vimshell.vim , mas não mencionou o porquê. Consequentemente, quando me afastei dessa pergunta, perdi muito tempo tentando as outras opções (de classificação muito mais alta).
Shougo / vimshell é a resposta. Aqui está o porquê:
Além de ser um emulador de terminal, o VimShell permite navegar pela saída do terminal no modo normal e visual. Portanto, se um comando executado resultar em uma saída que você deseja copiar e colar usando apenas o teclado ... o VimShell cobre isso.
Nenhuma das outras opções mencionadas, incluindo o comando: terminal no NeoVim, faz isso. Neovim's: terminal chega perto, mas fica aquém das seguintes formas a partir de 18/02/2017:
Move o cursor para o final do buffer, em vez de, finalmente, mantê-lo no mesmo local que o VimShell. Enorme perda de tempo.
Não suporta
modifiable = 1
ver uma discussão sobre isso no Github , de modo votos plugins como vim-easymotion não pode ser usado.Não suporta a exibição de números de linha como o Vimshell.
Não perca tempo com outras opções, incluindo o terminal Neovim's. Vá com o VimShell.
fonte
:terminal
pode absolutamente fazer o mesmo.:terminal
não pode fazer o mesmo que:VimShell
em termos de navegação e edição e de maneiras fundamentais. Veja a explicação acima.Você pode dar uma olhada no
:sh
comando (veja:help sh
no Vim).Vários comandos
fonte
set shell=/bin/sh
fará com que o vim use um shell mais silencioso para seus comandos.Não, você não pode:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
fonte
splitvt
- ele controla os códigos de controle de cores e tornavim
totalmente inutilizável.A única maneira que eu sei é usando o vim-shell , um patch de terceiros.
fonte
Eu uso isso agora, você pode tentar. VimShell
fonte
Experimente o vterm , que é um shell praticamente completo dentro do vim. É um pouco buggy com sua história e funções claras, e ainda está em desenvolvimento, mas ainda é muito bom
fonte
Supondo que sua versão do vim suporte
+term
primeiro o comando, configure o shell para o vim para usar em um comando (por exemploset=/usr/bin/zsh
) e, em seguida, execute o comando+term
(por exemplobo 15vs +term
). pode ser necessário fazer algumas manobras adicionais em suas janelas (por exemplo, excluir uma e girar), mas você terá seu terminal.fonte
Eu reconheço que não estou respondendo estritamente à sua pergunta, mas o que funcionou melhor para mim ao usar o Vim e os Terminais na mesma janela é o Tmux (que é uma espécie de "execução em segundo plano", semelhante à tela, embora isso funciona melhor com divisões e tabulações).
Este post o ajudará a entender como eles funcionam juntos: 'Tmux e Vim - ainda melhor juntos' .
Dessa forma, podemos converter o Vim em um poderoso IDE
fonte
Divida a tela e execute o comando
term ++curwin
para executar o terminal dentro do buffer do Vim. O comando a seguir faz as duas coisas e funcionou para mim:fonte