1

我一直是控制台 vim 用户,但最近我尝试使用 gvim。我进行了一些设置,使我的控制台习惯不会受到影响,例如在当前目录中打开一个 urxvt 终端,使用 .

然而,用我的上网本打开多个 gvim 和终端是很可怕的,很快我的 vim 空间就减少到一两厘米。充其量,窗口宽度减半,无法垂直分割屏幕(平铺 wm)。

我通过别名 vim 解决了这个问题,gvim --remote-silent它工作了几天,但今天我需要使用 -c '' 并意识到后面有任何开关 --remote-silent 将这些开关作为文件打开。这样做gvim --remote-silent --foo bar会打开两个文件,--foo 和 bar。

我为 设置了一个新别名alias vim=gvim,但恐怕这会让我再次成为控制台 vim 用户,比我想象的要早。

所以问题是,什么是继续使用 gvim 的首选方式,以最小的努力(设置系统可能很费力),以便我仍然可以继续使用 vim 的全部功能。该解决方案不需要使用远程 vim,它应该只是最小化 gvim 窗口。

4

2 回答 2

4

我来晚了,但我有一个建议。

首先,我同意@Herbert - 通常很少有理由运行多个 Vim 实例(控制台或其他)。将事物保存在一个实例中的好处实在是太大了。但是,我认为有必要混入-c;虽然我看不出有必要自己做:D。

我能看到获得此功能的最佳方法是使用--remote-sendvim 的功能而不是--remote-silent. 然而,这意味着一些 shell 脚本:

#!/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 实例正确集成。把所有东西都放在一个地方实在是太甜蜜了,不能放弃。

于 2011-09-08T15:42:58.460 回答
1

我不认为运行多个 gvim 实例是一个不错的解决方案。gvim --remote-silent当您不需要额外的开关(可能是大多数时候)时,为什么不只使用一个别名,gvim而当您想要添加命令行开关时使用另一个别名呢?对我来说似乎很好,没有太多要记住的。

运行多个 gvim 实例的主要不愉快之处在于,除了获得许多难以跟踪的窗口之外,每个 gvim 都有自己的运行时环境,更难在不同 gvim 实例的缓冲区之间共享和复制数据。

Derek Wyatt 在 --remote-silent 上有有趣的视频;我认为它不能解决您的问题,但您可能有兴趣观看它: OneVimToRuleThemAll

此外,如果问题是 gvim 中的窗口拆分正在占用屏幕空间,请更好地使用选项卡功能(您甚至可以禁用实际的选项卡标签,但保留打开的选项卡页面的隐喻)和/或或者只是在缓冲区之间导航,同时拥有一次只能看到一个缓冲区。

于 2010-12-14T22:55:24.440 回答