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


40

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

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


Открыть новую вкладку? (Ctrl + Shift + T)
Уилф

2
Сколько раз это делаю :) Мне не нравится это делать D:
Мухаммед Реза Резвани

1
Вы пробовали использовать оконный менеджер терминала, такой как tmux?
августа

Ответы:


67

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

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


21
Или просто %вместо fg. Или %1, %2и т. Д., Если у вас много фоновых заданий. jobsКоманда перечислит их. (Предполагая bashв качестве оболочки.)
Руслан

4
Я голосую за метод ^ z (и более поздний fg), потому что он может использоваться практически во всех процессах оболочки - это не пустая вещь, это трюк как использовать оболочку, который невероятно полезен в других контекстах.
dman

35

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

:!sh

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

:!sh&

9
Или просто использовать :shell.
wchargin

2
Это лучший ответ для большинства целей.
Фрэнк Конри

Это хорошо, но как насчет того, когда команда запускает сервер, например, http-serverи она печатает журналы, которые я хочу просмотреть? Я хотел бы иметь возможность переключаться на мои файлы, вносить изменения, а затем вернуться к журналам.
Коста

21

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

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

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


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.

7

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

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

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

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

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

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

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

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


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

4

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


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.