2012-07-01 41 views
0

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

当我尝试在控制台Vim中执行相同的操作时,将插入文件名的路径。例如,如果我拖放文件/home/myuser/foo.matic,则会将文本字符串'/home/myuser/foo.matic'应用于当前缓冲区。

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

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

+3

在终端vim中使用拖放看起来有点不可思议。对于图形用途,有gVim。我宁愿在vim或'vim foo.matic'中输入终端中的':e foo.matic'。另一种方法是使用'gvim -p --remote-tab-silent foo.matic'在gvim中的新选项卡中打开文件。 – epsilonhalbe

+0

我最近发现,屏幕重绘奇怪发生在终端Vim少得多。由于我只使用gVim的额外GUI功能,所以我尝试使用终端Vim代替它。只要有意义,我将把一个文件拖到编辑器中,而不是用e或NERD树打开它。 – rustushki

+0

它看起来像我可以使用终端Vim的--remote-tab-silent。这可能是一个不错的选择。 – rustushki

回答

2

你不能让vim自己的:e命令来做你所需要的,但你可以定义你自己的一个。最简单的解决方案 - 使shell解析shell意图解析的内容 - 列出如下:

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

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

+0

这似乎解决了我将文件拖入Vim的问题。它要求我在拖动之前键入:e,但这是可以接受的,尽管我实际上需要拖动文件。谢谢ZyX。 – rustushki

+0

@rustushki在拖动之前不键入':e',而是':E'。我不相信可能有更好的东西(尽管在gnome-terminal文档中可能有一个指针,与旧终端和帧缓冲区相比,终端仿真器具有相当多的功能)。绝对不是没有修补vim:文档指出drag'n'drop只能在GTK,win16和win32 GUI中使用。 – ZyX