Как запустить терминал внутри 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.
Ответ 12
Вы можете взглянуть на команду :sh
(см. :help sh
в Vim).
Различные команды
Ответ 13
Нет, вы не можете:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
Ответ 14
Только так я знаю, используя vim-shell, сторонний патч.
Ответ 15
Я использую это сейчас, вы можете попробовать. VimShell
Ответ 16
Попробуйте vterm, который представляет собой довольно полнофункциональную оболочку внутри vim. Он немного глючит своей историей и четкими функциями и все еще находится в разработке, но он все еще довольно хорош.
Ответ 17
Обновлено: Начиная с Vim-8 и neovim вы можете использовать :terminal
чтобы открыть буфер терминала в оболочке по умолчанию
Ответ 18
Главной новой функцией Vim 8.1 является поддержка запуска терминала в окне Vim.
:term
откроет терминал в другом окне внутри Vim.