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


40

Чи є спосіб отримати доступ до терміналу під час використання Vim ?

Мені не подобається відкривати інший термінал або зберігати та виходити з поточного терміналу.


Відкрити нову вкладку? (Ctrl + Shift + T)
Вільф

2
Скільки разів це роблю :) Мені не подобається це робити D:
Mohammad Reza Rezwani

1
Ви спробували скористатися менеджером вікон терміналу, як tmux?
jrg

Відповіді:


67

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

Порада про бонуси: це працює практично у всіх термінальних програмах. Використовуйте, bgщоб програма могла продовжувати працювати у фоновому режимі.


21
Або просто %замість fg. Або %1, %2і т.д. , якщо у вас є багато фонових завдань. jobsКоманда перелічить їх. (Припустимо, bashяк оболонку.)
Руслан

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

35

In vim, просто введіть:

:!sh

:!запускає зовнішній процес - в цьому випадку shіншу оболонку. Після виходу з оболонки контроль повернеться до vim. Якщо ви хочете використовувати оболонку одночасно з vim, додайте &до кінця команду sh:

:!sh&

9
Або просто використовувати :shell.
wchargin

2
Це найкраща відповідь для більшості цілей.
Френк Конрі

Це добре, але що робити, коли команда працює на сервері, як, http-serverі вона друкує журнали, які я хочу переглянути? Я хотів би мати можливість перейти на свої файли, внести зміни, а потім перейти до журналів.
Коста

21

Можна скористатися :shellкомандою (або короткою формою :sh). Від :help :shell:

Ця команда запускає оболонку. Коли оболонка виходить (після команди "вихід"), ви повертаєтесь до Vim. Назва команди оболонки походить від параметра 'shell'.

За замовчуванням на Ubuntu це дозволить отримати баш. введіть, 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 є відкриття вкладки в межах цих програм. Ці програми дозволяють досить легко тримати відкриту оболонку кек-сеансу термінальної сесії та перемикатися між цими екранами за допомогою клавіатури.


1

З новою версією vim 8.1 все, що вам потрібно зробити, це просто :terminalі вуаля! (це вбудовано)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.