52

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

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

4

7 回答 7

54
  1. 更新到 MacVim 7.3
  2. 进入一般首选项
  3. 在“从应用程序打开文件:”下选择“在当前窗口中”
  4. 在此选项下方的下拉菜单中选择“并设置 arglist”
于 2010-10-15T18:10:12.327 回答
33

您还可以添加:

alias mvim='open -a MacVim'

给你的.bash_profile

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

于 2012-08-14T09:45:35.527 回答
17

在看到这里的一切并尝试尝试什么之后,我个人使用这样的命令

mvim --help 

出现。

我找到

mvim --remote-tab-silent foo.txt

为我工作,然后我很快为我的.profile. 是的,如果你在选项之后不给它一个文件,它会很糟糕,但是谁打开一个没有名字的空白文件呢?

于 2014-05-29T07:22:33.193 回答
16

你也可以考虑这个关于编辑主 mvim 脚本的技巧。

为 MacVim 改进 mvim

此修改不太严重,并且也有效:

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

从命令行打开 MacVim 选项卡

显然,这些都不是最理想的 b/c,当您进行 MacVim 更新时,您必须维护 hack。但他们帮助我在新的 Mac Vim 选项卡中从终端打开多个文件。

于 2011-01-10T17:58:39.893 回答
4

@Björn Winckler 的回答向您展示了如何对通过 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)

于 2012-08-27T16:23:59.753 回答
1

这就是我完成此任务的方式:

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

autocmd BufWinEnter,BufNewFile * silent tabo

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

于 2010-08-13T18:17:12.760 回答
1

我发现 Azriel 的回答很好,但如果文件不存在,它就不起作用。这个小功能做同样的事情,但你也可以创建新文件。

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

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

mvim foo

它将在新选项卡中打开。

于 2014-05-21T11:44:01.617 回答