【问题标题】:MacVim Open File In Existing WindowMacVim 在现有窗口中打开文件
【发布时间】:2011-03-29 13:40:58
【问题描述】:

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

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

【问题讨论】:

标签: tabs macvim


【解决方案1】:

你也可以考虑这个关于编辑主 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

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

【讨论】:

【解决方案2】:

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

mvim --help 

出现了。

我发现了

mvim --remote-tab-silent foo.txt

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

【讨论】:

  • 谢谢!以前的建议并没有给我想要的东西,但确实做到了! +1 :-)
  • mvim --remote-silent foo.txt 对于那些不喜欢标签的人。
【解决方案3】:

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

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

只需将其添加到您的.bash_profile。然后你可以编辑一个新文件foo as

mvim foo

它将在新标签页中打开。

【讨论】:

  • 如果参数为空,上述命令不起作用。我对其进行了一些更改,以使其在未指定文件名时打开一个未命名的文件。 mvim () { ([[ -z $@ ]] || touch "$@" ) && open -a MacVim "$@"; }
【解决方案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)

【讨论】:

  • 我一直在尝试这样做,但我找不到“mvim”文件。那是指什么文件?
【解决方案5】:

您还可以添加:

alias mvim='open -a MacVim'

致您的.bash_profile

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

【讨论】:

  • 是的 - 这个加上设置“首选项” -> “从应用程序打开文件”到“并设置 arglist”(或“每个文件都有一个选项卡”对于那些做 i> 喜欢标签——在拆分窗口中打开也是一种选择)效果很好,谢谢!
  • 新文件呢?使用这个别名,如果我输入vim ~/foo,那么终端将出错The file /Users/hobbes3/foo does not exist.。使用普通的vim,它将创建一个名为foo 的新文件。
  • @hobbes3 我发现在大多数情况下打开特定文件是个坏主意。我几乎总是发现自己导航到一个目录然后执行mvim .。这将在 vim 中打开当前目录并将工作目录设置为同一目录。从那里您可以使用:e foo 或NerdTree 或您拥有的东西在vim 中创建新文件。或者,如果你真的想从命令行创建文件,你总是可以先touch ~/foo
  • 效果很好,但由于自制版本控制,我最终运行了多个 MacVim.app 副本。我的解决方案是将其更改为alias mvim='open -a /Applications/MacVim.app'
【解决方案6】:
  1. 更新到 MacVim 7.3
  2. 进入一般首选项
  3. 在“从应用程序打开文件:”下选择“在当前窗口中”
  4. 在此选项下方的下拉菜单中选择“并设置 arglist”

【讨论】:

  • 这仅适用于在 Finder 中打开的文件 - 从终端执行 mvim filename.txt 仍会打开多个窗口。见this mailing list discussion
  • 命令行正是我遇到的问题。总结该链接:将别名 vi="open \\"mvim://open?url=file://$1\\"" 添加到您的 .bash_profile 中,然后当您执行“vi foo”时,它将在新选项卡中打开 foo在您现有的 MacVim 窗口中。太棒了!
  • 我了解到您也可以使用mvim --servername VIM --remote path/to/file.txt(回复:@mattb 感谢您提供指向该邮件列表讨论的链接。)在当前窗口中打开。您只需要知道窗口的名称,您可以在顶部的文件名和目录旁边找到它
  • 我不得不稍微改变@TimKeating 的方法以使其适合我:我在我的个人资料中添加了“alias tv="open -t $1"'。 '-t' 选项使文件在默认文本编辑器(在我的例子中是 MacVim)中打开。
  • @TimKeating:新文件呢?使用这个别名,如果我输入vim ~/foo,那么终端将出错The file /Users/hobbes3/foo does not exist.。使用普通的vim,它将创建一个名为foo 的新文件。
【解决方案7】:

我是这样完成的:

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

autocmd BufWinEnter,BufNewFile * silent tabo

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

【讨论】:

  • 是的,正如@peritus 所提到的,这根本不是一个好的解决方案,因为基本上它的意思是“每当你打开一个新缓冲区时,将当前选项卡设置为唯一的选项卡”,这有效地禁用了完全是标签。这对我来说很好,因为我从未使用过标签,但其他用户应该知道。请参阅上面@bjorn-winckler 的答案以获得真正的解决方案。
  • 是的。对于喜欢标签的人来说,这绝对是一个警告,但对于我们这些使用比标签更好的方法的人来说,这是一个巨大的 +1 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多