h0rr0rr_drag0n 18.11.2010 12:38
Vim — Shell в отдельном буфере vim'а
Лично мне, кажется весьма удобной возможность работать в консоли (например в том же bash'е) не отвлекаясь от любимого vim'а. Можно одновременно коммитить код или изменять структуру каталогов проекта или делать прочие подобные вещи не выходя из vim'а и не отвлекаясь на другие окна.Раньше (пару лет назад), я искал плагин, который позволил бы открывать отдельный буфер с каким-нибудь shell'ом, но натыкался на предложения перекомпилировать vim, предварительно применив к его исходникам набор патчей. Естественно, меня не устраивало подобное положение вещей - мне хотелось простого плагина, а не плясок с бубном.
Оказывается, выход есть! Подобный плагин существует и называется Conque Shell.
Данный плагин позволяет открывать вертикальный или горизонтальный буфер или новую вкладку с практически любым командным интерпретатором. Также, можно открывать выбранный интерпретатор и в текущем буфере. Можно запускать почти все консольные программы - мне не удалось запустить лишь mc.
Как видно, цвета вполне хорошо отображаются даже в таком терминале...
Установка плагина проста и состоит из 4 шагов:
Нужно скачать последнюю версию conque.vba по сссылке вышеОткрыть скачанный файл в vim'еСказать в нормальном режиме :so %Выйти из vim'а
В зависимостях у плагина лишь сам Vim и Python.
Существует всего 4 основных команды для работы с плагином:
:ConqueTerm bash - открывает терминал с bash'ем в текущем буфере:ConqueTermSplit bash - открывает терминал с bash'ем в новом горизонтальном буфере:ConqueTermVSplit bash - то же самое, что и в предыдущем пункте, но буфер теперь вертикальный:ConqueTermTab bash - то же самое, но вместо нового буфера открывается новая вкладка
Команду создания нового горизонтального буфера с запущенным bash'ем я повесил у себя на отдельный хоткей. Вначале создается соответствующий буфер, затем в нем отключается, включенная мной ранее для всего Vim'а, подсветка пробелов и табуляций (чтобы не мешала), затем осуществляется переход в режим вставки для начала работы с запущенным интерпретатором.
Настройки ConqueTerm просты и достаточно подробно описаны в :help ConqueTerm. Я опишу лишь те настройки, которые я был вынужден поменять для своего удобства.
InsertOnEnter = 0 означает, что при переходе в буфер с открытым интерпретатором vim не будет самостоятельно переходить в режим вставки. Так как-то привычнее... CWInsert = 1 позволяет переходить между открытыми буферами по w и прочим подобным сочетаниям клавиш. Чтобы послать терминалу, надо просто нажать и отпустить эти клавиши и подождать.
ReadUnfocused = 1 указывает плагину на необходимость обновления содержимого терминального окна, даже если курсор находится в другом окне. Так можно получать, например, самые свежие показания от top'а. Автоскроллинг не поддерживается - автор пишет, что это связано с ограничениями вимовского скриптового языка.
SendFunctionKeys = 1 заставляет посылать функциональные клавиши F1-F12 напрямую терминалу, а не vim'у.
CloseOnEnd = 1 - буфер закрывается при завершении программы, запущенной в ней. В нашем случае этой программой является bash.
В случае, если терминал нещадно тормозит, имеет смысл отключить поддержку цвета:
1 |
|
Конечно будет не так красиво и цветасто, как в обычном терминале, но работать будет довольно быстро.
Радует, что этот плагин поддерживает разнообразные извращения, например такие как это:
(uname -a, запущенный в сесси bash'а, которая запущена внутри консольного вима, который запущен в сесии bash'а, которая запущена внутри gvim'а)
В заключение, небольшой скринкаст, показывающий как все это работает "в движении":
Shell в отдельном буфере vim'а
По материалам блога Дракон-линуксоид
saver 18.11.2010 13:25 #
+ 0 -
Сенкс, надо
а можно написать:
1):sh
2)сделать то что надо в терминале
3)написать exit в терминале и попасть обратно в вим
1):sh
2)сделать то что надо в терминале
3)написать exit в терминале и попасть обратно в вим
1) Не получится одновременно видеть и текст и открытый шелл.
2) Не работает копирование/вставка/редактирование в шелле средствами вима (2yy, 3dw и т.п.)
3) В GVim'е :sh работает мягко говоря не очень...
2) Не работает копирование/вставка/редактирование в шелле средствами вима (2yy, 3dw и т.п.)
3) В GVim'е :sh работает мягко говоря не очень...
Имхо, быстрее открыть в буфере, и писать :bd и :bp. А если это на хоткеях (например как у меня), выходит итого быстрее.
а в чем принципиальные преимущества метода по сравнению с GNU screen?
Ничего. У меня примерно такие же мысли, за исключение того, что предпочитаю tmux =)
я не ошибусь, если предположу, что ты и со "скрином" знаком на уровне? не мог бы ты написать топик, типа "мое имхо. что лучше screen или tmux?"
Отличий не так и много. Я давно писал про tmux, но там есть основные отличия и в комментариях с мухасом их тоже можно почерпнуть (отличия).
Пост именно об отличиях я вряд ли напишу, слишком занят :)
Пост именно об отличиях я вряд ли напишу, слишком занят :)
о_О... а я думал, что в Vim встроенный шел идет по умалчанию, как и в Emacs (M-x shell набираешь - и тебе достается странная, но вполне работоспособная консоль =)
Есть то что вылезает по команде :sh, но оно не слишком сильно встроенное - вим одновременно с таким шеллом уже не поиспользуешь...