Открыть вкладку vim в новом (GUI) окне?

Я хочу переместить текущую вкладку в новое (визуальное/реальное) окно в MacVim.

Это, наверное, сложно, так как:

  • в справке vim ничего нет, и очень мало - бесполезно - попаданий в google
  • MacVim не поддерживает его (ссылка, 2009 г.)

Поэтому мне интересно, нашел ли кто-нибудь способ добиться этого?


person h2459jl    schedule 25.05.2011    source источник


Ответы (2)


Самое близкое, что, я думаю, вы можете сделать, это использовать mksession

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

Если эта идея щекочет ваше воображение, вы можете подумать о создании скрипта, который будет отфильтровывать части из файла сеанса (это Yust Another Vim Text Script)

:mksession! $HOME/detach.vim
:tabclose
:silent! !gvim remote --servername Detach -nR +'silent! source H:\detach.vim' +tabonly
  1. сохранить все текущие окна, сопоставления, настройки (:he mksession)
  2. закройте вкладку, которую мы собираемся отсоединить
  3. clone the session (detach.vim) into a remote vim
    • :silent! (try not to talk too much)
    • !gvim remote --servername Detach; запустите новый удаленный сервер Vim, если он еще не существует, или обратитесь к существующему серверу с именем Detach
    • -nR TODO Fix Это сделано для того, чтобы избежать использования файлов подкачки (потому что я не нашел способа подавить ужасные ATTENTION сообщения[1]). Однако это может быть небезопасным советом в зависимости от вашей ситуации, поэтому я также добавляю -R для режима только для чтения
    • +'silent! source H:\detach.vim' +tabonly -- В удаленном vim укажите источник сеанса для клонирования и оставьте только активную вкладку (которая уже была закрыта на шаге 1).

Конечно, немного грубовато по краям, но, как мне кажется, довольно близко к тому, что вы задумали. Если вам удобно, вы можете снять флаги -nR и просто щелкнуть несколько раздражающих сообщений о файле подкачки (клавиатура: Q).

[1] :he ATTENTION


Постскриптумы:

  • в окнах вы можете использовать :silent! !start /b gvim ...., если у вас торчат окна терминала
  • также в Windows вы можете столкнуться с раздражающим поведением, если результирующее окно gvim слишком маленькое. Последовательность :simalt ~x — это один хакерский способ развернуть окно (при условии английского интерфейса, потому что x — это ускоритель для Maximize).
  • как глазурь на торте, vim 7.3 имеет «постоянную отмену». См., например. :se undofile
person sehe    schedule 25.05.2011
comment
Хотя вы можете настроить открытие файла в новом окне рабочего стола, это сводит на нет многие преимущества использования Vim. Каждое окно рабочего стола Vim — это отдельный экземпляр Vim, который независим и ничего не знает о другом. Вы отказываетесь от возможности перемещаться между файлами, используя буфер Vim и навигацию по вкладкам, возможность использовать обычное копирование и вставку между окнами Vim и многое другое. Возможно, в некоторых случаях это не имеет значения. Но лучшим решением в большинстве случаев является использование встроенного оконного режима Vim для одновременного просмотра более одного документа. - person Herbert Sitz; 25.05.2011
comment
@Герберт: Кто спорит? Я просто отвечаю на вопрос. Возможно, вы хотели прокомментировать вопрос, а не мой ответ? - person sehe; 25.05.2011
comment
@sehe: я понимаю, что вы, возможно, не выступаете за то, чтобы делать то, что он просит. И вы даете хороший ответ. Но по моему опыту, многие пользователи vim, которые задают вопрос OP, могут не осознавать недостатки использования нескольких экземпляров Vim. Это следует указать. Конечно, мой комментарий больше относится к вопросу, чем к вашему ответу. - person Herbert Sitz; 25.05.2011
comment
@Herbert: Я был бы признателен, если бы вы могли переместить исходный комментарий (просто скопируйте, вставьте, удалите оригинал). Я удалю свою часть этого обмена, чтобы у нас был чистый комментарий к содержанию моего ответа. Тывм - person sehe; 25.05.2011
comment
@Herbert: в моем случае вкладка (окно) предназначена только для поиска, я хотел переместить ее на второй монитор. - person h2459jl; 25.05.2011
comment
@sehe: спасибо! Это еще не работает на 100% (последняя строка с :silent и gvim заменена на mvim). Однако, если я открою detach.vim с помощью вашей команды из консоли, прежняя вкладка (без NERDtree) появится в новом окне. - person h2459jl; 25.05.2011
comment
@ Hans-Peter: Наличие его на другом мониторе может быть веской причиной для открытия второго экземпляра vim. Просто имейте в виду, что буферы в этом экземпляре Vim не будут частью того же сеанса, что и буферы в другом вашем Vim. Вы сводите на нет большую часть возможностей Vim, открывая разные экземпляры, но, как и в случаях, подобных вашему, иногда компромисс может быть оправдан, и ответ sehe дает вам хороший способ сделать это. - person Herbert Sitz; 25.05.2011

Я не думаю, что это возможно, потому что, когда вы открываете новый экземпляр (g) vim, у вас нет доступа к истории отмены предыдущего экземпляра vim. Все, что вы можете сделать, это (в командном режиме):

:!gvim %

Он откроет текущий файл в новом экземпляре gvim. По крайней мере, это все, о чем я мог думать. я могу ошибаться

person sica07    schedule 25.05.2011
comment
(a) какое отношение история отмен имеет к вопросу? (b) В vim 7.3 есть persistent undo - person sehe; 25.05.2011
comment
После перезагрузки файла (используя предложенный мной метод) изменения, сделанные до перезагрузки, теряются. Я думал, что он хотел бы что-то вроде клона сеанса (включая ветки отмены). Во всяком случае, я не знал о постоянной отмене, спасибо. - person sica07; 25.05.2011