Acesso ao terminal enquanto você estiver no Vim


40

Existe uma maneira de acessar o terminal enquanto estiver usando o Vim ?

Não gosto de abrir outro terminal ou salvar e sair do terminal atual.


Abrir uma nova guia? (Ctrl + Shift + T)
Wilf

2
Quantas vezes isso :) Eu não gosto de fazer isso D:
Mohammad Reza Rezwani

11
Você já tentou usar um gerenciador de janelas de terminal como o tmux?
Jrg

Respostas:


67

Você pode enviar o sinal SIGTSTP ao vim. Você faz isso pressionando ctrl+ z. O Vim será suspenso em segundo plano e você pode usar o terminal. Digite fgo terminal para continuar com o vim.

Dica de bônus: funciona em quase todas as aplicações de terminal. Use bgpara permitir que o aplicativo continue sendo executado em segundo plano.


21
Ou apenas em %vez de fg. Ou %1, %2etc., se você tiver muitos trabalhos em segundo plano. jobscomando irá listá-los. (Assumindo bashcomo o escudo.)
Ruslan

4
Eu voto no método ^ z (e depois em fg), porque ele pode ser usado em quase todos os processos de shell - não é uma coisa do vim, é um truque de como usar o shell que é incrivelmente útil em outros contextos.
dman

35

No vim, digite:

:!sh

:!lança um processo externo - nesse caso sh, outro shell. O controle retornará ao vim assim que você sair do shell. Se você deseja usar o shell simultaneamente com o vim, adicione &ao final do comando sh:

:!sh&

9
Ou apenas use :shell.
11444 wchargin

2
Esta é a melhor resposta para a maioria dos propósitos.
31814 Frank Conry

Isso é legal, mas e quando o comando está executando um servidor, como http-serverele imprime os logs que eu quero visualizar? Eu gostaria de poder mudar para meus arquivos, fazer edições e voltar para os logs.
Costa

21

Você pode usar o :shellcomando (ou o formato abreviado :sh). De :help :shell:

Este comando inicia um shell. Quando o shell sair (após o comando "exit"), você retornará ao Vim. O nome do comando shell vem da opção 'shell'.

Por padrão, no Ubuntu, isso dará a você o bash. digite exitpara retornar ao vim quando terminar.


8

Desde o vim recente, agora você pode:

:terminal

Isso foi adicionado inicialmente no Vim 8.0.693 , mas com muitos bugs. Veja :help terminal:

WARNING: THIS IS ONLY PARTLY IMPLEMENTED, ANYTHING CAN STILL CHANGE

The terminal feature is optional, use this to check if your Vim has it: 
        echo has('terminal')
If the result is "1" you have it.   

[...]

The terminal feature requires the +multi_byte, +job and +channel features.

==============================================================================
1. Basic use                                            terminal-use

This feature is for running a terminal emulator in a Vim window.  A job can be
started connected to the terminal emulator. For example, to run a shell: 
     :term bash

Or to run a debugger: 
     :term gdb vim

The job runs asynchronously from Vim, the window will be updated to show
output from the job, also  while editing in any other window.

7

Como complemento a todas as respostas.

Você pode instalar o plugin ConqueTerm

Este plugin fornece a capacidade de executar programas interativos dentro dos buffers do vim.

Após a instalação, você pode adicionar estas 2 linhas ao seu .vimrc:

:nnoremap <S-w> :q!<CR>
:nnoremap <S-t> :ConqueTermSplit bash<CR>

E você poderá executar bashpressionando Shift+ Te fechar a guia Conque atual pressionando Shift+W

É perferct se você precisar abrir / fechar rapidamente bash.

Aqui está o gif que mostra como é a aparência


você pode atualizar as postagens? Os links que você mencionou parecem desatualizados
ggulgulia

4

Outra opção com a tela ou o byobu é abrir uma guia dentro desses programas. Esses programas facilitam bastante a manutenção de um shell cq da sessão de terminal aberto e a alternância entre essas telas com o teclado.


1

Com a nova versão do vim 8.1, tudo o que você precisa fazer é apenas :terminale pronto! (isso é incorporado)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.