Использование одного экземпляра VIM с--рекотизированным
-
10-10-2019 - |
Вопрос
Я всегда был пользователем консоли VIM, но в последнее время я пытался использовать GVIM. Я сделал настройки так, чтобы мои консольные привычки не пострадали, например, открытие терминала URXVT в текущем каталоге.
Однако открытие нескольких GVIM и терминалов с моим нетбуком ужасно, быстро сокращает мое пространство VIM до двух сантиметра. В лучшем случае ширина окна вдвое сокращается, что делает невозможным вертикально разделенный экран (Tiling Wm).
Я обошел эту проблему, псевдонируя Vim, чтобы gvim --remote-silent
И это работало нормально в течение нескольких дней, но сегодня мне нужно было использовать -c '' '' и понял, что наличие каких -либо переключателей позади -Remote -Silent открывает эти коммутаторы в качестве файлов. Так делаю gvim --remote-silent --foo bar
Открывает два файла: - - -foo и bar.
Я поместил новый псевдоним для alias vim=gvim
, Но я боюсь, что это сделает меня снова пользователем консоли VIM, раньше, чем я думал.
Таким образом, вопрос заключается в том, что будет предпочтительным способом продолжения использования GVIM, с минимальными усилиями (настройка системы может быть трудоемкой), чтобы я все еще мог продолжать использовать VIM с его полной мощностью. Решение не нужно использовать удаленный VIM, оно должно просто минимизировать окна GVIM.
Решение
Я опаздываю на эту вечеринку, но у меня есть предложение.
Во -первых, я согласен с @herbert - обычно есть очень мало причин, чтобы когда -либо запустить более одного экземпляра VIM (консоль или иное). Преимущества сохранения вещей в одном случае слишком велики. Но я вижу необходимость смешивать -c
; Хотя я не вижу необходимости сделать это сам: D.
Лучший способ получить эту функциональность - это использовать --remote-send
особенность VIM вместо --remote-silent
. Анкет Это означает немного сценариев оболочки, однако:
#!/bin/bash
function resolveFile
{
if [ -f "$1" ]; then
echo $(readlink -f "$1")
else
echo "$1"
fi
}
function gg
{
local opts=$(getopt -o c: --long command: -n "gg" -- "$@")
if [ $? != 0 ]; then return 1; fi
eval set -- "$opts"
cmd=""
while :
do
case "$1" in
-c|--command)
cmd="$2"
shift 2
;;
--) shift
break
;;
esac
done
if [[ -n "$cmd" ]]; then
if [[ -n "${1-}" ]]; then
cmd=":e $(resolveFile $1)<cr>$cmd<cr>"
else
cmd="$cmd<cr>"
fi
shift 1
fi
files=""
for f in $@
do
files="$files $(resolveFile $f)"
done
cmd="$cmd:args! $files<cr>"
gvim --remote-send "$cmd"
}
Я лишь незначительно проверил это, но ты должен иметь возможность делать что -то вроде:
gg -c G file1 file2 file3 file4
Это должно редактировать file1
и переместиться в нижнюю часть этого. Это должно также добавить file2
, file3
а также file4
в список ARGS, чтобы вы могли выполнять такие команды, как :bnext
. Анкет Он также должен вернуться к той же функциональности, что и --remote-silent
Когда вы не предоставляете -c
.
я В самом деле Думаю, стоит прыгнуть через эти обручи, чтобы правильно интегрировать свой опыт командной строки с одним экземпляром VIM. Все в одном месте слишком мило, чтобы сдаться.
Другие советы
Я не думаю, что несколько экземпляров GVIM - это приличное решение. Почему бы просто не иметь один псевдоним gvim --remote-silent
что вы используете, когда вам не нужны дополнительные переключатели (предположительно большую часть времени), а другой псевдоним - просто gvim
когда вы хотите добавить коммутаторы командной строки? Мне кажется, не так много, чтобы помнить.
Основная неприятная сторона от нескольких экземпляров GVIM работает, помимо получения множества окон, которые трудно отслеживать, заключается в том, что каждый GVIM имеет свою собственную среду выполнения, труднее поделиться и копировать данные между буферами в разных экземплярах GVIM.
У Дерека Уайетта есть интересное видео на-рекот-силент; Я не думаю, что это решает вашу проблему, но вы можете быть заинтересованы в ее просмотре:OneVimtoruleTheMall
Кроме того, если проблема заключается в том, что расщепления окна в GVIM снимают экранирование имущество, лучше используйте функциональность вкладки (вы даже можете отключить фактические этикетки вкладок, но сохранить метафору открытых страниц вкладок) и/или альтернативно просто перемещаться между буферами, имея при этом, имея при этом буферы. Только один буфер видимый за раз.