【问题标题】:Edit a file with single quotes in the filename in Vim在 Vim 中编辑文件名中带有单引号的文件
【发布时间】:2012-07-01 13:22:30
【问题描述】:

我在 Vim 中遇到了一个奇怪的问题。我想将一个文件从我的桌面或文件管理器拖放到 Vim 中并进行编辑。 Gvim 正确处理了这种行为。

当我尝试在控制台 Vim 中做同样的事情时,会插入文件名的路径。例如,如果我拖放文件 /home/myuser/foo.matic,它会将文本字符串 '/home/myuser/foo.matic' 应用到当前缓冲区。

如果我输入 :edit,然后拖放文件名,Vim 会将 '/home/myuser/foo.matic' 视为一个新目录。

我相信这里的问题是文件路径前后的引号。这些似乎是由 gnome-terminal 和终止符插入的。拖放时有没有办法从文件名中去除这些引号?或者,Vim 有没有办法忽略引号?

【问题讨论】:

  • 在终端 vim 中使用拖放似乎有点奇怪。对于图形使用,有 gVim。我宁愿在 vim 中输入 :e foo.matic 或在终端中输入 vim foo.matic。另一种方法是 gvim -p --remote-tab-silent foo.matic 在 gvim 中的新选项卡中打开文件。
  • 我最近发现,在终端 Vim 中,屏幕重绘的怪异发生的情况要少得多。由于我很少使用 gVim 的额外 GUI 功能,因此尝试改用终端 Vim 对我来说是有意义的。只要有意义,我就会将文件拖到编辑器中,而不是使用 :e 或 NERD Tree 打开它。
  • 看来我也可以将 --remote-tab-silent 与终端 Vim 一起使用。这可能是一个不错的选择。

标签: vim gnome-terminal terminator


【解决方案1】:

你不能让 vim 自己的 :e 命令来做你需要的,但你可以定义你自己的。最直接的解决方案 - 让 shell 解析 shell 想要解析的内容 - 如下所列:

command -nargs=? -bang -bar E :execute "e<bang> ".fnameescape(system("echo -n ".<q-args>))

。此命令仅接受 :e[!] {file} 变体,不允许使用 +cmd++opts

【讨论】:

  • 这似乎解决了我将文件拖入 Vim 的问题。它要求我在拖动之前输入 :e,但这对于我实际需要拖动文件来说是可以接受的。谢谢 ZyX。
  • @rustushki 在拖动之前不输入:e,而是输入:E。我认为不可能有更好的东西(尽管 gno​​me-terminal 文档中可能有一个指针,但与旧终端和帧缓冲区相比,终端仿真器具有很多功能)。绝对不能不给 vim 打补丁:文档指出,drag'n'drop 仅在 GTK、win16 和 win32 GUI 中有效。
猜你喜欢
  • 2023-02-01
  • 2014-01-05
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多