Доступ к терминалу, когда вы находитесь на Vim

40

Есть ли способ получить доступ к терминалу при использовании Vim ?

Я не люблю открывать другой терминал или сохранять и выходить из текущего терминала.

Мохаммед Реза Резвани
источник
Открыть новую вкладку? (Ctrl + Shift + T)
Уилф
2
Сколько раз это делаю :) Мне не нравится это делать D:
Мухаммед Реза Резвани
1
Вы пробовали использовать оконный менеджер терминала, такой как tmux?
августа

Ответы:

67

Вы можете отправить VIM сигнал SIGTSTP. Вы делаете это, нажимая ctrl+ z. Vim будет приостановлен в фоновом режиме, и вы можете использовать терминал. Введите fgв терминале, чтобы продолжить с vim.

Бонусный совет: это работает практически во всех терминальных приложениях. Используйте, bgчтобы приложение продолжало работать в фоновом режиме.

noleti
источник
21
Или просто %вместо fg. Или %1, %2и т. Д., Если у вас много фоновых заданий. jobsКоманда перечислит их. (Предполагая bashв качестве оболочки.)
Руслан
4
Я голосую за метод ^ z (и более поздний fg), потому что он может использоваться практически во всех процессах оболочки - это не пустая вещь, это трюк как использовать оболочку, который невероятно полезен в других контекстах.
dman
35

В vim просто введите:

:!sh

:!запускает внешний процесс - в данном случае shдругую оболочку. Контроль вернется к vim, как только вы выйдете из оболочки. Если вы хотите использовать оболочку одновременно с vim, добавьте &в конец команды sh:

:!sh&
sbell
источник
9
Или просто использовать :shell.
wchargin
2
Это лучший ответ для большинства целей.
Фрэнк Конри
Это хорошо, но как насчет того, когда команда запускает сервер, например, http-serverи она печатает журналы, которые я хочу просмотреть? Я хотел бы иметь возможность переключаться на мои файлы, вносить изменения, а затем вернуться к журналам.
Коста
21

Вы можете использовать :shellкоманду (или краткую форму :sh). От :help :shell:

Эта команда запускает оболочку. Когда оболочка выходит (после команды «выход»), вы возвращаетесь в Vim. Название команды оболочки происходит от опции 'shell'.

По умолчанию в Ubuntu это даст вам bash. введите, exitчтобы вернуться к vim, когда вы закончите.

evilsoup
источник
8

С недавних пор vim теперь можно делать:

:terminal

Первоначально это было добавлено в Vim 8.0.693 , но с большим количеством ошибок. Смотрите :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.
gauteh
источник
7

Как дополнение ко всем ответам.

Вы можете установить плагин ConqueTerm

Этот плагин предоставляет возможность запускать интерактивные программы внутри буферов vim.

После установки вы можете добавить эти 2 строки в ваш .vimrc:

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

И вы сможете запустить bash, нажав Shift+ T, и закрыть текущую вкладку Conque, нажав Shift+W

Это прекрасно, если вам нужно быстрое открытие / закрытие bash.

Вот gif , показывающий, как это выглядит

c0rp
источник
Можете ли вы рассмотреть вопрос об обновлении сообщений? Ссылки, которые вы упомянули, кажутся устаревшими
ggulgulia
4

Другой вариант с экраном или byobu - открыть вкладку в этих программах. Эти программы позволяют довольно легко держать открытую оболочку cq терминала и переключаться между этими экранами с помощью клавиатуры.

immeëmosol
источник
1

С новой версией vim 8.1 все, что вам нужно сделать, это просто :terminalи вуаля! (это встроено)

neelabalan
источник