1

私はずっとコンソール vim ユーザーでしたが、最近は gvim を使ってみました。現在のディレクトリで urxvt ターミナルを開くなど、コンソールの習慣が損なわれないように設定しました。

しかし、私のネットブックで複数の gvim とターミナルを開いているのは恐ろしく、すぐに私の vim スペースを 1 つか 2 センチメートルに減らしてしまいます。せいぜい、ウィンドウの幅が半分になり、画面を垂直方向に分割する (タイル wm) ことができなくなります。

vim にエイリアスを設定することでこの問題を回避gvim --remote-silentし、数日間は問題なく動作しましたが、今日は -c '' を使用する必要があり、--remote-silent の背後にスイッチがあると、それらのスイッチがファイルとして開かれることに気付きました。このようにすると、 --foogvim --remote-silent --foo barと bar の 2 つのファイルが開きます。

に新しいエイリアスをalias vim=gvim設定しましたが、思ったよりも早くコンソール vim ユーザーに戻ってしまうのではないかと心配しています。

したがって、問題は、最小限の労力で (システムのセットアップは面倒な場合があります)、gvim を使い続けるための好ましい方法は何かということです。このソリューションでは、リモート vim を使用する必要はありません。gvim ウィンドウを最小化するだけです。

4

2 に答える 2

4

このパーティーに来るのが遅くなりましたが、提案があります。

まず、@Herbert に同意します。通常、複数の Vim インスタンス (コンソールまたはその他) を実行する理由はほとんどありません。物事を 1 つのインスタンスに保持することの利点は、あまりにも大きすぎます。しかし、混ぜる必要があると思います-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され、その下に移動するはずです。などのコマンドを実行できるように、引数リストfile2file3とも追加する必要があります。また、 を指定しない場合と同じ種類の機能に戻す必要があります。file4:bnext--remote-silent-c

コマンドライン エクスペリエンスを単一の Vim インスタンスに適切に統合するために、これらのフープを飛び越える価値があると本当に思いますすべてを 1 か所にまとめることは、あきらめるには甘すぎます。

于 2011-09-08T15:42:58.460 に答える
1

複数の gvim インスタンスを実行することは適切な解決策ではないと思います。gvim --remote-silent追加のスイッチを必要としない場合 (おそらくほとんどの場合) に使用する1 つのエイリアスとgvim、コマンド ライン スイッチを追加する場合に使用する別のエイリアスを作成しないのはなぜですか? 私には問題ないように思えますが、覚えておくべきことはあまりありません。

複数の gvim インスタンスを実行することによる主な不愉快な点は、追跡するのが難しい多くのウィンドウを取得することは別として、各 gvim には独自のランタイム環境があり、異なる gvim インスタンスのバッファー間でデータを共有およびコピーするのが難しいことです。

Derek Wyatt には --remote-silent に関する興味深いビデオがあります。あなたの問題に対処しているとは思いませんが、それを見ることに興味があるかもしれません: OneVimToRuleThemAll

また、gvim 内のウィンドウ分割が画面のスペースを奪っているという問題がある場合は、タブ機能をより有効に活用してください (実際のタブ ラベルを無効にすることもできますが、開いているタブ ページのメタファーを保持することもできます)。一度に表示できるバッファは 1 つだけです。

于 2010-12-14T22:55:24.440 に答える