MacVim在现有窗口中打开文件

时间:2010-08-13 16:15:52

标签: tabs macvim

有没有办法设置MacVim在正在运行的MacVim实例的当前窗口中打开一个新文件?我目前有MacVim首选项“在当前窗口的新选项卡中打开新文件”设置,但理想情况下我只想以“:e new_file”的方式打开新文件,没有选项卡。

我的主要动机是我目前使用NERDTree和Bufexplorer作为我的工作流程,根本不需要选项卡。我也使用PeepOpen,它很棒,除非它总是根据MacVim的首选项打开文件,所以我能做的最好的事情就是在当前的MacVim窗口中打开一个新选项卡。

7 个答案:

答案 0 :(得分:51)

  1. 更新至MacVim 7.3
  2. 进入常规首选项
  3. 在“从应用程序打开文件:”中选择“在当前窗口中”
  4. 在此选项下方的下拉菜单中,选择“并设置arglist”

答案 1 :(得分:28)

您还可以添加:

alias mvim='open -a MacVim'

.bash_profile

这对我来说似乎是最简单的解决方案。

答案 2 :(得分:15)

在看到这里的所有内容并尝试使用

之后,我个人会使用这样的命令
mvim --help 

出现了。

我找到了

mvim --remote-tab-silent foo.txt

为我工作,然后我很快为我的.profile添加了一个别名。是的,如果您在选项后没有提供文件,那么它是barfs,但是谁打开了一个没有名字的空白文件呢?

答案 3 :(得分:14)

您可能还会在编辑主mvim脚本时考虑此提示。

Improving mvim for MacVim

这种修改不那么严重,也有效:

  

MacVim支持标签,但遗憾的是多次调用`mvim   从命令行导致多个单独的窗口打开,   而不是在一个窗口中的多个选项卡。我做了以下   修改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
     

(来自Open MacVim tabs from command-line

显然,当你进行MacVim更新时,这些都是一些不太理想的b / c你必须维持黑客攻击。但他们在新的Mac Vim标签中帮助我从终端打开多个文件。

答案 4 :(得分:4)

@BjörnWinckler的回答向您展示了如何通过finder和其他操作系统开放机制打开的文件。

如果您希望它与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)

答案 5 :(得分:1)

这就是我完成这个的方法:

在VIM中,有一个命令“tabo”,它使当前选项卡成为唯一的选项卡。我将以下内容添加到〜/ .vimrc中:

autocmd BufWinEnter,BufNewFile * silent tabo

这使得无论何时创建新缓冲区或输入新缓冲区,当前选项卡都会自动成为唯一的选项卡。此命令不会影响我的缓冲区,因此效果正是我想要的:在MacVim的当前实例中打开一个文件,不要添加任何新选项卡。

答案 6 :(得分:1)

我发现Azriel的答案很棒,但如果文件不存在则无效。这个小功能可以做同样的事情,但你也可以创建新文件。

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

只需将其添加到.bash_profile即可。然后,您可以将新文件foo编辑为

mvim foo

它将在新标签页中打开。