Como posso abrir um Shell dentro de uma janela do Vim?

112

Posso abrir um shell usando o comando: shell no Vim, porém não posso editar um arquivo e ao mesmo tempo usar o shell.

Existe alguma maneira de dividir o Vim em várias janelas (ou guias) e ter um shell aberto em uma delas?

Martín Fixman
fonte
1
Costumava haver um patch de shell para o vim, mas ele não compila mais afaik. O mais próximo que você vai chegar de um shell verdadeiro é usar o screen ou tmux. Essa é a maior coisa de que sinto falta no vim.
Randy Morris
2
Parece uma duplicata de stackoverflow.com/questions/1236563/…
Brad Cupit,

Respostas:

85

Neovim e Vim 8.2suportam isso nativamente por meio do :ter[minal]comando.

Veja terminal-windowna documentação para detalhes.

prater
fonte
5
Esta deve ser a solução aceita para vim> = 8.0.
dia
3
Como dividir o terminal verticalmente?
Kiran Kumar Kotari
2
@KiranKumarKotari tente vsplit term://bashse você estiver usando Neovim.
prater
4
com o vim 8.0 ou posterior, o terminalcomando divide a janela e fornece um shell de comando com uma cor especial na barra de status da janela. Liso.
NoelProf
@KiranKumarKotari vert [ical] ter [
minal
46

Bem, isso depende do seu sistema operacional - na verdade, eu não testei no MS Windows - mas Conque é um dos melhores plug-ins que existem.

Na verdade, pode ser melhor, mas funciona.

Zsolt Botykai
fonte
4
Se você estiver usando o Vundle para gerenciar os plug-ins, pode adicionar Bundle 'jewes / Conque-Shell' ao seu arquivo .vimrc e executar: BundleInstall para instalá-lo.
Mingjiang Shi
Uma coisa a observar: o requisito + python ou + python3 para o vi pode ser um assassino em alguns ambientes de trabalho.
cfi
Este é o URL atualizado (com capturas de tela): github.com/wkentaro/conque.vim
Walty Yeung
18

:vspou :sp- divide o vim em duas instâncias, mas você não pode usar: shell em apenas uma delas.

Por que não exibir outra guia do terminal e não outra guia do vim. Se gostar da ideia, pode experimentá-la: Ctrl-shift-t.e alternar entre elas com Ctrl - pageupeCtrl - pagedown

Se você quiser apenas alguns comandos de shell, você pode fazer qualquer comando de shell no vim usando !

Por exemplo :!./a.out.

vladv
fonte
1
E para executar um executável atualmente aberto, você pode usar vimmagia caminho assim::!./%
CPRN
Por que não exibir outra guia do terminal - nem todo mundo está usando o vim em um emulador de terminal acima de uma GUI ... De Ctrl-qualquer coisa, suponho que sua resposta assume gnome-terminal ou um emulador semelhante.
törzsmókus
8

Você pode usar tmuxou screen(o segundo é capaz de fazer apenas divisões horizontais sem um patch) para dividir seu terminal. Mas não sei como ter uma instância do Vim em ambos os painéis.

ZyX
fonte
4
a tela pode fazer divisões verticais se você construir a partir do git.
Randy Morris
8

Se você ainda não descobriu, pode usar o incrível plugin de tela .

Conque também é excepcional, mas acho a tela muito mais prática (não vai "sujar" seu buffer por exemplo e você pode apenas enviar os comandos que realmente deseja após editá-los em seu buffer)

Eelvex
fonte
6

Eu acho que esta é uma questão bastante antiga, mas agora em 2017. Temos o neovim, que é um fork do vim que adiciona suporte de terminal.

Portanto, a invocação :termabriria uma janela de terminal. A beleza desta solução, ao contrário de usar tmux (um multiplexador de terminal), é que você terá as mesmas vinculações de janela de sua vimconfiguração. neovim é compatível com vim, então você pode basicamente copiar e colar o seu .vimrce ele funcionará.

Mais vantagens são que você pode alternar para o modo normal no terminal aberto e pode fazer cópias e edições básicas. Também é muito útil para git commits, eu acho, já que tudo em seu buffer você pode usar no autocompletar.

Vou atualizar esta resposta, já que o vim também está planejando lançar o suporte de terminal, provavelmente no vim 8.1. Você pode acompanhar o progresso aqui: https://groups.google.com/forum/#!topic/vim_dev/Q9gUWGCeTXM

Depois de lançado, acredito que esta é uma configuração mais superior do que usar o tmux.

chriz
fonte
6
Foi lançado em Vim 8.0, eu acho
LangeHaare
3

VimShell de Shougo , que pode auto-completar nomes de arquivos se usado com neocomplcache

kuroz
fonte
1

Não exatamente o que você está pedindo, mas você pode se interessar por meu plugin vim-notebook que permite ao usuário manter um processo de background vivo e fazer com que avalie parte do documento atual (e escreva a saída no documento). Destina-se a ser usado em documentos do tipo notebook contendo partes de código a serem avaliadas.

Thomas Baruchel
fonte
0

Você pode querer abrir um programa de "tela", dividir a tela, abrir o shell em um e o vim em outro. Funciona para mim.

Mrcybul
fonte
Cancelei o -1 porque não havia explicação. Além disso, testei a solução do plugin vim screen e não é muito diferente da solução do mrcybul. @mrcybul: tanques por tentar ajudar. Para evitar ser rejeitado, leia com atenção as outras respostas e adicione a sua própria apenas se achar que traz algo novo. Inclua também por que sua solução pode ser melhor em certos casos.
Titou
0

Atualmente, estou usando o tmux.

Instalação: sudo apt-get install tmux Execute: tmux

Ctrl + b seguido por Ctr +%: divide sua janela de terminal em duas metades verticais.

Ctrl + "seta para a esquerda | seta para a direita": move entre os terminais.

Arturo Ruiz Mañas
fonte