Использование одного экземпляра VIM с--рекотизированным

StackOverflow https://stackoverflow.com/questions/4444547

  •  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 снимают экранирование имущество, лучше используйте функциональность вкладки (вы даже можете отключить фактические этикетки вкладок, но сохранить метафору открытых страниц вкладок) и/или альтернативно просто перемещаться между буферами, имея при этом, имея при этом буферы. Только один буфер видимый за раз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top