Открывайте файлы в существующем 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\" \"%*\""
Теперь у вас будет такое контекстное меню:
Пользователи 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