Intereting Posts
Как синхронизировать системный стоп-ордер с одного сервиса? Получение строк из файлов с определенным расширением Скомпилировать pdf-файл с нескольких изображений, отсканированных с помощью scanimage –batch / usr / bin / время программы C с ввода-вывода не дает результатов Как скомпилировать и установить программы из источника Ограничения файловой системы Как полностью отключить учетную запись? Как извлечь дату и рассчитать, находится ли она в течение «х» дней с сегодняшнего дня? Как разрешить Page Up на экране GNU? Как узнать, что мешает моей системе монетного двора Linux? зарезервировать дисковое пространство перед копированием файлов Windows 10 и Archlinux Dualboot с зашифрованного диска динамические стопки на консоли Как создать постоянный псевдоним ip, принадлежащий разным подсетям в Centos Как запустить процесс linux и вернуться к нему позже?

Как переключаться между vim-буфером и экраном командной оболочки в vim?

Мне нахожу, что постоянно надо нажимать Ctrl-Z а затем fg чтобы идти между этими экранами (где командный терминал – это командная строка, из которой вы использовали для вызова vim ). Он также создает нежелательные строки fg на моей консоли. Я почти уверен, что это можно сделать, поскольку я помню, как это делалось, когда я учился в университете, но я не помню, как это сделать.

Информация о терминалах и его отношении к vim

терминал vt100 и другие имеют способ сохранить экран до его изменения, а затем он может восстановить его, когда захочет. vim делает это и может быть замечен, если вы заходите в vim а затем в оболочку или Ctrl-Z . Большую часть времени он покажет вам, что у вас было на экране перед входом в vim , сохранив экран до того, как vim экран vim . Если ваш терминал не поддерживает эту функцию, он просто поместит командную строку непосредственно под экраном vim , прокручивая ее. Это можно увидеть, экспортируя в переменную TERM менее функциональную эмуляцию терминала или очистив ее (хотя, очистив ее, она может поместить vim в линейный режим или может использовать самые основные коды терминалов в зависимости от ее реализации). Подробнее о сохранении / восстановлении экрана см. В разделе Коды терминалов (ANSI / VT100) в разделе « Сохранить / восстановить» .

Запуск gvim открывает новое окно, поэтому окно терминала остается доступным для команд. Для промежуточных «экранов оболочки» я делаю :sh чтобы получить доступ к сеансу оболочки, и введите <Ctrl>-D чтобы выйти из него; fg не требуется, но в этом случае приглашение добавляется в консольную оболочку. И без запуска X я запускаю две консоли: ту, где работает vim, и другая, где работает оболочка, и я переключаю консоли (в моем случае), например <Ctrl>-<Alt>-<F1> . (В зависимости от реальных потребностей один из этих вариантов должен соответствовать, я надеюсь).

Работает ли команда Vim :shell работает так, как вы хотите? :shell<return> заставляет Vim запускать ваш $ SHELL. Когда вы выходите из оболочки, вы вернулись в Вим, прямо там, где вы остановились.

Итак, я выяснил, как я могу это сделать с помощью Gary Johnson в группе vim_use групп Google . Он помог, указав, как запустить команды tput из vim. Вот мое окончательное решение:

  1. В памяти vim есть следующий скрипт функции:

     function! ShowTerm() call system(">/dev/tty tput rmcup") call input("") call system(">/dev/tty tput smcup") redraw! endfunction 
  2. Сопоставьте сценарий с некоторыми командами, такими как:

     map [= :call ShowTerm()<CR> 

Я использовал последовательность [= , но вы можете использовать все, что хотите.

Теперь введите последовательность клавиш, и вы получите другой экран. Нажмите Enter, и вы вернетесь к экрану vim. «Ввод» также не добавляет линейный канал на экран терминала, так что никаких марширующих линий нет.

Ницца! 🙂 Обратите внимание, что это, вероятно, не так, как это было сделано 15-20 лет назад, но это работает.

РЕДАКТИРОВАТЬ

Чтобы не быть зависимым от доступности tput , я обнаружил, что следующее, что вызывается @MarkPlotnick, также работает. Просто замените функцию ShowTerm() выше:

 function! ShowTerm() silent !read -sN 1 redraw! endfunction 

Это зависит от того, как bash используется как оболочка (или другие, имеющие аналогичный вызов чтения).

2nd Edit

Кроме того, вы можете автоматизировать этот .vim поставив файл .vim в папку ~ / .vim / plugins, содержащую следующее:

 " Function that allows viewing command line display last time it was seen. " Note: Will only work on terminals that allow saving/restoring the display. function! ShowTerm() " This will invoke the command shell and call the read function. " Will exit when a key is pressed. This is specific to bash and " and may have to be changed if using a different shell. silent !read -sN 1 redraw! endfunction " Maps [= sequence to view command line display last time it was seen. map [= :call ShowTerm()<CR>