Как мне запустить терминал внутри Vim? - PullRequest
273 голосов
/ 06 августа 2009

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

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

Ответы [ 17 ]

231 голосов
/ 26 мая 2010

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

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

188 голосов
/ 06 августа 2009

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

:! somecommand [ENTER]

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

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

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

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

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

125 голосов
/ 11 августа 2009

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

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

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

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

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

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

81 голосов
/ 25 августа 2011

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

Обновление

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

noremap <C-d> :sh<cr>

71 голосов
/ 19 октября 2017

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

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

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

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

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

30 голосов
/ 27 марта 2015

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

28 голосов
/ 04 апреля 2018

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

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

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

 :term bash

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

 :term make myprogram

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

22 голосов
/ 22 мая 2018

:term

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

17 голосов
/ 07 ноября 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...