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

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

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

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

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>'

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

:tabnew
:e .

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

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

Хотите, чтобы ваше контекстное меню 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

Пользователи 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

Есть выход:

n*.cpp|tab ba

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

n*.cpp|sba

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

:help ba

и я не знаю что n, но это не будет работать без него.

Вот мой стартовый скрипт 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
Другие вопросы по тегам