Как запустить терминал внутри Vim?

Я привык к Emacs, но я пробую Vim посмотреть, какой из них мне больше нравится.

Одна вещь, которая мне нравится в Emacs, - это возможность запуска терминала внутри Emacs. Возможно ли это внутри Vim? Я знаю, что вы можете выполнять команды из Vim, но я хотел бы иметь возможность запускать терминал внутри вкладки.

Ответ 1

Я бы определенно рекомендовал screen для чего-то подобного. Vim - это текстовый редактор, а не оболочка.

Я бы использовал Ctrl+A S для разделения текущего окна по горизонтали или на экране Ubuntu и других исправленных версий, вы можете использовать Ctrl+A | (pipe) для разделения по вертикали. Затем используйте Ctrl+A Tab (или, что то же самое, в некоторых системах Ctrl+A Ctrl+I, которые могут быть проще ввести) для переключения между окнами. Существуют и другие команды для изменения размера и расположения окон.

Или менее продвинутое использование screen - это просто открыть несколько полноэкранных окон и переключиться между ними. Это то, что я обычно делаю, иногда использую функцию разделения экрана.

В справочнике GNU Screen Survival Guide есть несколько полезных советов, если вы не знакомы с его использованием.

Ответ 2

Устаревший с августа 2011 года

Проверьте Conque Shell (также на GitHub). Позволяет запускать любые интерактивные программы внутри vim, а не только оболочку.

Ответ 3

Я не уверен точно, чего вы пытаетесь достичь (я никогда не использовал Emacs), но вы можете запускать команды в Vim, набрав:

:! somecommand [ENTER]

И если вы хотите набрать несколько команд или поиграть в оболочке какое-то время, вы всегда можете использовать:

:! bash (or your favourite shell) [ENTER]

Как только команда или оболочка завершатся, вам будет предложено нажать Enter, чтобы вернуться в окно редактора

Vim преднамеренно облегчен и не обладает способностью делать вещи без редакционного типа, точно так же, как запустить полномасштабную оболочку внутри панели/вкладки Vim, но, как упоминалось выше, существуют сторонние аддоны, такие как vim-shell которые позволяют вам делать такие вещи.

Обычно, если я хочу переключиться между Vim и моей оболочкой (Bash), я просто нажал CTRL + Z, чтобы приостановить процесс Vim, поиграть в своей оболочке, а затем набрать "fg", когда захочу вернуться к Vim - сохранить мой редактор и мою оболочку красивой и отдельной.

Ответ 4

Способ, которым я обхожу это:

  • приостановить Vim с помощью Ctrl + Z,
  • играть в терминале,
  • затем вернитесь точно туда, где вы оставили Vim, просто набрав команду fg.

Ответ 5

:sh, затем ctrl+d, чтобы вернуться (bash)

Обновление

Вы можете сопоставить ctrl+d в vim для запуска :sh, что позволяет быстро переключаться между bash и vim.

noremap <C-d> :sh<cr>

Ответ 6

Если включено в вашей версии Vim, терминал можно запустить с помощью команды :term.

Поддержка терминала была добавлена ​​в Vim 8. Это дополнительная функция, которая может быть включена при компиляции Vim с помощью функции + terminal. Если ваша версия Vim имеет поддержку терминала, :echo has('terminal') будет выводить "1".

Ввод :term поместит вас в режим Terminal-Job, где вы можете использовать терминал, как ожидалось.

В режиме Terminal-Job нажатие Ctrl-W N или Ctrl-\ Ctrl-N переключает режим на Terminal-Normal, что позволяет перемещать курсор, а команды запускаться аналогично Vim Normal mode. Чтобы вернуться в режим работы терминала, нажмите i.

В других ответах упоминается аналогичная функциональность в Neovim.

Ответ 7

Этот вопрос довольно старый, но для тех, кто его найдет, есть новое возможное решение: Neovim содержит полноценный эмулятор терминала первого класса, который делает именно то, что пытался ConqueTerm. Просто запустите :term <your command here>.

<C-\><C-n> вернется в режим нормального режима. Если вы похожи на меня и предпочитаете, чтобы режим выхода из режима выхода оставался, вы можете добавить это в свой nvimrc:

tnoremap <ESC><ESC> <C-\><C-N>

И затем нажатие ESC дважды выйдет из режима терминала обратно в нормальный режим, поэтому вы можете манипулировать буфером, который пишет команда по-прежнему.

Хотя имейте в виду, поскольку nvim находится в тяжелом развитии в то время, когда я отправляю этот ответ, можно добавить другой способ выхода из режима терминала. Поскольку Ctrl+\ Ctrl+n переключается в обычный режим практически из любого режима, я не ожидаю, что этот ответ станет неправильным, но имейте в виду, что если он не работает, этот ответ может быть устаревшим.

https://github.com/neovim/neovim

Ответ 8

В конце концов команда native :terminal была добавлена в vim в 2017 году.

Вот выдержка из : терминала readme:

Эта функция предназначена для запуска эмулятора терминала в окне Vim. Задание можно запустить, подключив его к эмулятору терминала. Например, чтобы запустить оболочку:

 :term bash

Или запустить команду сборки:

 :term make myprogram

Задание выполняется асинхронно из Vim, окно будет обновлено, чтобы показать выходные данные задания, а также при редактировании в другом окне.

Ответ 9

:term

Однако эта функция была добавлена в Vim 8.1, которая на момент публикации была выпущена совсем недавно, поэтому вам, возможно, придется обновить ее, чтобы использовать ее.

Ответ 10

Я знаю, что я прямо не отвечаю на вопрос, но я думаю, что это хороший подход. Никто не упомянул tmux (или, по крайней мере, не как автономный ответ). Tmux является терминальным мультиплексором, подобным экрану. Наиболее вещи могут быть сделаны в обоих мультиплексорах, но afaik tmux это легче для настройки. Сейчас tmux активно развивается, чем экран и там довольно большая экосистема, как инструменты, которые помогают конфигурация, ecc.

Также для vim есть еще один плагин: ViMUX, что очень помогает в взаимодействие между обоими инструментами. Вы можете вызывать команды с помощью:

:call VimuxRunCommand("ls")

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

Он также может позволить вам запустить из приглашения в случае, если вы не хотите запускать целая команда:

<Leader>vp :VimuxPromptCommand<CR>

Как бы не было достаточно, существует не менее 6 плагинов, специфичных для платформы:

  • vim-vroom: бегун для rspec, огурца и теста/единицы; поддержка vimux через g:vroom_use_vimux
  • vimux-ruby-test: набор команд для простого запуска тестов ruby ​​
  • vimux-cucumber: запустить функции огурца через Vimux
  • vim-turbux: тестирование Turbo Ruby с помощью tmux
  • vimux-pyutils: набор функций для vimux, которые позволяют запускать блоки кода в ipython
  • vimux-nose-test: выполнить тесты носа в vimux

Вот хороший "пример использования": Тесты по требованию с использованием Vimux и Turbux со Spork и Guard

Ответ 11

Кто-то уже предложил https://github.com/Shougo/vimshell.vim, но они не упомянули почему. Следовательно, когда я ушел от этого вопроса, я потратил много времени на другие варианты с гораздо более высоким рейтингом.

Shougo/vimshell - это ответ. Вот почему:

В дополнение к терминальному эмулятору, VimShell позволяет вам перемещаться по выходному терминалу в нормальном и визуальном режимах. Таким образом, если команда, которую вы запускаете, выводит результат, который вы хотите скопировать и вставить с помощью клавиатуры... VimShell покрывает это.

Ни один из других упомянутых опций, включая команду: terminal в NeoVim, не делает этого. Neovim: терминал близок, но, по крайней мере, имеет следующие пути от 2/18/2017:

  • Перемещает курсор в конец буфера, а не в последний раз держит его в том же месте, что и VimShell. Огромная трата времени.

  • Не поддерживает modifiable = 1 см. обсуждение этого в Github, поэтому полезные плагины, такие как vim-easymotion, не могут использоваться.

  • Не поддерживает отображение номеров строк, таких как Vimshell.

Не тратьте время на другие варианты, включая Neovim: терминал. Пойдите с VimShell.

Ответ 14

Только так я знаю, используя vim-shell, сторонний патч.

Ответ 15

Я использую это сейчас, вы можете попробовать. VimShell

Ответ 16

Попробуйте vterm, который представляет собой довольно полнофункциональную оболочку внутри vim. Он немного глючит своей историей и четкими функциями и все еще находится в разработке, но он все еще довольно хорош.

Ответ 17

Обновлено: Начиная с Vim-8 и neovim вы можете использовать :terminal чтобы открыть буфер терминала в оболочке по умолчанию

Ответ 18

Главной новой функцией Vim 8.1 является поддержка запуска терминала в окне Vim.

:term откроет терминал в другом окне внутри Vim.