it-swarm.com.ru

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

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

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

273
Evan

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

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

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

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

115
Greg Hewgill

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

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

231
Kyle Simek

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

:! somecommand [ENTER]

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

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

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

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

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

187
David Claridge

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

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

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

Обновление:

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

noremap <C-d> :sh<cr>

80
tester

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

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

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

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

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

71
Daniel S.

Этот вопрос довольно старый, но для тех, кто его нашел, есть новое возможное решение: 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

30
lahwran

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

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

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

 :term bash

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

 :term make myprogram

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

28
fjardon

:term

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

22
flarn2006

Я знаю, что прямо не отвечаю на вопрос, но думаю, что это хороший подход. Никто не упомянул tmux (или, по крайней мере, не как отдельный ответ). Tmux - терминальный мультиплексор, похожий на экран. Большинство вещей можно сделать в обоих мультиплексорах, но на самом деле это проще в настройке. Кроме того, прямо сейчас tmux разрабатывается более активно, чем screen, и вокруг него есть довольно большая экосистема, такая как инструменты, помогающие конфигурировать, 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 : запускать функции Cucumber через Vimux
  • vim-turbux : Turbo Ruby тестирование с tmux
  • vimux-pyutils : набор функций для vimux, которые позволяют запускать блоки кода в ipython
  • vimux-nose-test : запускать тесты носа в vimux

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

17
Pablo Olmos de Aguilera C.

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

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

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

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

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

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

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

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

13
user3751385

Возможно, вы захотите взглянуть на команду :sh (см. :help sh в Vim).

Различные команды

9
Eric Schwabe
7
Amber

Единственный известный мне способ - использовать сторонний патч vim-Shell .

4
romandas

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

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

3
Yossarian42

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

3
Gatspy

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

2
Christopher Dumas