Открывать файлы в существующем Gvim на нескольких (новых) вкладках

Я добавил несколько псевдонимов в свой .bashrc, чтобы открыть группу файлов проекта в gvim, каждый на своей вкладке:

gvim -p <list of file names using absolute paths>

Это все хорошо, за исключением того, что есть несколько групп файлов, между которыми я могу перемещаться в любой момент (в моем текущем проекте используется Ruby on Rails, что объясняет это). Было бы здорово, если бы я мог добавить новые вкладки к существующему экземпляру gvim. На моей последней должности я работал с Vista; Я обошел это, открыв кучу пустых вкладок в gvim, что позволило мне щелкнуть правой кнопкой мыши по имени файла и выбрать «Открыть в существующем gvim без имени». Сейчас я использую Ubuntu, и в контекстном меню такого нет. Есть ли способ сделать это из командной строки?


person kajaco    schedule 21.05.2009    source источник


Ответы (6)


Если vim скомпилирован с опцией clientserver, вы можете это сделать. Запустите свой экземпляр vim со следующим флагом:

$ gvim --servername GVIM  # GVIM is the server name. It can be anything.

Чтобы открыть больше вкладок в этом случае, вы можете запустить команду:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ...

Функция clientserver в vim очень удобна. Это не ограничивается открытием файлов; его можно использовать для отправки любой команды в vim из командной строки. Например, чтобы удаленно закрыть экземпляр vim, вы можете использовать:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>'
person Ayman Hourieh    schedule 21.05.2009
comment
см. vim -h для других удаленных параметров - person Nathan Fellman; 17.06.2009
comment
Я добавил опцию -geom к начальной команде для запуска gvim. Мне также пришлось удалить параметр -p (для вкладок) из всех псевдонимов. Тогда это сработало отлично! - person kajaco; 24.06.2009
comment
Что ж, он отлично работает, за исключением одного: если у меня более одного экземпляра gvim, первый из которых является сервером, а второй (или несколько), созданный из CL или щелкнув значок или выбрав файл для открытия с помощью gvim, затем я пытаюсь открыть вкладку на сервере (у меня установлены псевдонимы, как указано), новые вкладки всегда переходят во второй экземпляр, независимо от того, как он был создан или какой экземпляр был последним активным. Любые идеи? - person kajaco; 27.06.2009
comment
stackoverflow.com/questions/936501 / сохраняет до одного экземпляра. - person kajaco; 18.08.2009

Внутри Gvim введите :tabe {file_name}. Это откроет названный файл в новой вкладке. Если вам не нравится набирать длинные имена файлов, попробуйте следующее:

:tabnew
:e .

Это откроет новую пустую страницу вкладки и откроет файловый браузер. Вы можете перемещаться мышью или использовать клавиатуру. Щелкните или нажмите клавишу ввода на файле, который хотите открыть. Попробуйте с помощью клавиатуры навести курсор на файл, который вы хотите открыть, а затем нажмите «t». При этом выбранный файл откроется в новой вкладке, а браузер файлов останется открытым на первой вкладке. Это может быть быстрый способ открыть кучу файлов.

С помощью вкладок можно делать множество вещей, которые могут облегчить жизнь. Чтобы перейти к соответствующему разделу интерактивного справочного руководства Vim, введите :h tabpage.

person Steve K    schedule 17.06.2009
comment
Это также отличный трюк для открытия файла в существующем экземпляре gvim. Я использую его для вещей, которые мне не нужны достаточно часто, чтобы создать псевдоним, и когда мне нужен только один файл, а не их целая кучка. - person kajaco; 24.06.2009
comment
Подождите, это еще не все! Сделать это можно с помощью одной команды:: tabnew% - person K. Norbert; 17.11.2009
comment
Получив команду :tabnew %, Gvim открыл новую вкладку, содержащую буфер (имя файла) из предыдущей вкладки, из которой я ввел команду. Это правильное поведение? - person Derek Mahar; 13.05.2011
comment
@DerekMahar Да,% относится к пути к файлу, над которым вы сейчас работаете. Возможно, вы сможете перейти к другому файлу из этого, но я недостаточно знаю о vim, чтобы рассказать вам, как это сделать. - person webdesserts; 24.09.2011
comment
Вы можете сократить это до :tabe .. Если вы хотите открыть другой файл из того же каталога, вы можете попробовать :tabe %:h - person Ehtesh Choudhury; 12.11.2011
comment
Чтобы победить мертвую лошадь: также см. Tex (открыть проводник в новой вкладке), Vex (открыть проводник в новом вертикальном окне) и Sex (открыть проводник в новом горизонтальном окне. Также gigidy.) - person danns87; 31.01.2014

Хотите, чтобы в контекстном меню Windows можно было открывать файлы в новой вкладке текущего открытого окна gvim?

Сохраните его как файл с именем temp.reg и дважды щелкните его, чтобы добавить настройки в реестр. Обязательно измените путь к vim, если у вас другой.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim]
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command]
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\""

Теперь у вас будет такое контекстное меню:

контекстное меню vim

person matt burns    schedule 25.03.2013
comment
Вопрос был в том, как это сделать в Ubuntu. - person kajaco; 21.03.2014
comment
если пользователь Ubuntu достаточно умен, чтобы взять командную строку из ответа, это сработает и для него. (Проверено на Arch Linux :)) - person Slava; 17.09.2015

Пользователи Linux могут использовать такой сценарий:

#!/bin/bash

ANS=`pgrep -fx "gvim --servername GVIM"`

echo $@

if [[ ! $ANS ]]; then
    gvim --servername GVIM
fi

if [[ $1 ]]; then
    gvim --servername GVIM --remote-tab "${@}"
fi

Затем отредактируйте файл gvim.desktop для использования этого скрипта:

Exec=/home/user/bin/my_gvim_script.sh %F
person Jan Valiska    schedule 11.03.2013

Есть выход:

n*.cpp|tab ba

или если вы хотите разделить:

n*.cpp|sba

Если вы хотите узнать больше:

:help ba

и я не знаю, что такое n, но без него он бы не работал.

person user1021852    schedule 12.11.2011

Вот мой сценарий запуска gvim. Это продолжение предыдущих ответов. Это гарантирует, что при вызове gvim при любых обстоятельствах будет запущен только один gvim экземпляр:

  • gvim вызывается без имени файла, если gvim экземпляр не запущен; gvim запущен.
  • gvim вызывается без имени файла при наличии экземпляра gvim; открывается пустая новая вкладка.
  • gvim вызывается с именем файла с экземпляром gvim или без него; откроется вкладка, показывающая файл.

Это будет имитировать стандартное поведение других редакторов.

#!/bin/bash
exec=/usr/bin/gvim  #the path to gvim
if [ $# -eq 0 ]
  then  # no filename given
    if [ -z $($exec --serverlist) ]
      then  # no filename given and no gvim instance
        $exec -f --servername GVIM > /dev/null 2>&1
      else  # no filename given, but a gvim instance exists
        $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1
    fi
  else  # filenames given
    $exec -f --servername GVIM --remote-tab "$@" > /dev/null 2>&1
fi
person Serge Stroobandt    schedule 09.10.2014