web-dev-qa-db-ja.com

MacVimは既存のウィンドウでファイルを開く

実行中のMacVimインスタンスの現在のウィンドウで新しいファイルを開くようにMacVimを設定する方法はありますか?私は現在MacVimの環境設定「現在のウィンドウの新しいタブで新しいファイルを開く」を設定していますが、理想的には、タブなしで「:e new_file」が機能する方法で新しいファイルを開きたいです。

私の主な動機は、ワークフローにNERDTreeとBufexplorerを現在使用しており、タブをまったく必要としないことです。私はPeepOpenも使用しています。これは、MacVimの設定に基づいて常にファイルを開くことを除いて素晴らしいので、私ができる最善のことは、新しいタブで現在のMacVimウィンドウで開くことです。

50
davertron
  1. MacVim 7.3にアップデート
  2. 一般設定に移動します
  3. [アプリケーションからファイルを開く]で、[現在のウィンドウで]を選択します
  4. このオプションの下のプルダウンメニューで、「引数リストを設定」を選択します
51
Björn Winckler

追加することもできます:

alias mvim='open -a MacVim'

あなたの.bash_profile

これは私にとって最も簡単な解決策のようです。

28
Dan

メインのmvimスクリプトを編集するときに、このヒントを検討することもできます。

MacVimのmvimの改善

この変更は少し厳しく、また機能します:

MacVimはタブをサポートしていますが、残念ながらコマンドラインから `mvimを複数回呼び出すと、1つのウィンドウに複数のタブが開くのではなく、複数のウィンドウが開きます。これを修正するために、mvimスクリプトに次の変更を加えました。

次の行をファイルの先頭、コメントセクションの下に追加します。

tabs=true

ファイルの下部にあるif構造を次のものに置き換えます。

# Last step:  fire up vim.
if [ "$gui" ]; then
  if $tabs && [[ `$binary --serverlist` = "VIM" ]]; then
    exec "$binary" -g $opts --remote-tab-silent ${1:+"$@"}
  else
    exec "$binary" -g $opts ${1:+"$@"}
  fi
else
  exec "$binary" $opts ${1:+"$@"}
fi

コマンドラインからMacVimタブを開く から)

明らかに、これらは両方ともMacVimの更新を行うときにハックを維持する必要がある、少し最適ではありません。しかし、それらは私が新しいMac Vimタブでターミナルから複数のファイルを開くのを助けてくれました。

15
bryan kennedy

私はここですべてを見て、何を使って実験した後、私はこのようなコマンドを個人的に使用します

mvim --help 

起きた。

見つけた

mvim --remote-tab-silent foo.txt

私のために働いた後、すぐに.profileにエイリアスを追加しました。はい、オプションの後にファイルをフィードしないと、エラーが発生しますが、名前のない空のファイルを開くのは誰ですか?

15
jmorriscal

@BjörnWincklerの回答は、Finderやその他のOSのオープンメカニズムを通じて開かれたファイルに対してそれを行う方法を示しています。

Mvimコマンドで動作させる場合は、mvimファイルを見つけて、一番下の行を

if [ "$gui" ]; then
    # Note: this isn't perfect, because any error output goes to the
    # terminal instead of the console log.
    # But if you use open instead, you will need to fully qualify the
    # path names for any filenames you specify, which is hard.
    exec "$binary" -g $opts ${1:+"$@"}
else
    exec "$binary" $opts ${1:+"$@"}
fi

if [ "$gui" ]; then
  # Note: this isn't perfect, because any error output goes to the
  # terminal instead of the console log.
  # But if you use open instead, you will need to fully qualify the
  # path names for any filenames you specify, which is hard.

  #make macvim open stuff in the same window instead of new ones
  if $tabs && [[ `$binary --serverlist` = "VIM" ]]; then
    exec "$binary" -g $opts --remote ${1:+"$@"}
  else
    exec "$binary" -g $opts ${1:+"$@"}
  fi
else
  exec "$binary" $opts ${1:+"$@"}
fi

これにより、コマンドラインから開いたすべてのファイルも同じウィンドウで開きます。

また、ファイルを分割したり、新しいタブを追加したりするのではなく、すでに開いている場合に、ファイルに同じバッファを開くようにしたい場合

au VimEnter,BufWinEnter * NERDTreeFindをgvimrcに(通常のvimに干渉しないように)

(この最後の部分では、NERDTreeをインストールする必要があります)

4
Will

これは私がこれを達成した方法です:

VIMには、現在のタブを唯一のタブにするコマンド「tabo」があります。以下を〜/ .vimrcに追加しました:

autocmd BufWinEnter,BufNewFile * silent tabo

これにより、新しいバッファーを作成したり、新しいバッファーに入ると、現在のタブが自動的に唯一のタブになります。このコマンドは私のバッファーに影響を与えないので、効果はまさに私が望むものです:MacVimの現在のインスタンスでファイルを開き、新しいタブを追加しないでください。

1
davertron

Azrielの回答は素晴らしいと思いましたが、ファイルが存在しない場合は機能しません。この小さな関数は同じことを行いますが、新しいファイルを作成することもできます。

mvim () { touch "$@" && open -a MacVim "$@"; }

.bash_profileに追加するだけです。次に、新しいファイルfooを次のように編集できます

mvim foo

新しいタブで開きます。

1
Erik Henriksson