Открывайте файлы в существующем Gvim на нескольких (новых) вкладках - PullRequest
42 голосов
/ 21 мая 2009

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

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

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

Ответы [ 6 ]

70 голосов
/ 22 мая 2009

Если 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>'
20 голосов
/ 17 июня 2009

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

:tabnew
:e .

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

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

11 голосов
/ 25 марта 2013

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

6 голосов
/ 11 марта 2013

Пользователи 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
1 голос
/ 10 октября 2014

Вот мой стартовый скрипт 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
1 голос
/ 12 ноября 2011

Есть способ:

n*.cpp|tab ba

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

n*.cpp|sba

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

:help ba

и я не знаю, что такое n, но без него не получилось бы.

...