使用NERDtree Vim插件复制路径文件

15

有没有办法在Vim的NERDtree插件中复制文件路径?

更好的方式:有没有一些插件可以执行与Sublime Text的SideBarEnhancements插件相同的操作?


1
请编辑您的问题,解释a)ST插件的功能以及b)为什么Vim中的对应功能不适用。另外,复制文件名后您想做什么?将其插入到当前缓冲区中?在另一个程序中粘贴?请注意XY问题。 - romainl
3个回答

17

NERD_tree有自己的扩展系统;只需将以下片段放入~/.vim/nerdtree_plugin/yank_mapping.vim中:

call NERDTreeAddKeyMap({
        \ 'key': 'yy',
        \ 'callback': 'NERDTreeYankCurrentNode',
        \ 'quickhelpText': 'put full path of current node into the default register' })

function! NERDTreeYankCurrentNode()
    let n = g:NERDTreeFileNode.GetSelected()
    if n != {}
        call setreg('"', n.path.str())
    endif
endfunction

当然,您可以调整默认键(yy)并注册("),使用+来操作剪贴板。


很棒的提示,Ingo!它可以正常工作,但是有没有一种从项目根路径复制而不是/home的方法呢? - Tárcio Zemel
1
@TárcioZemel:你的意思是相对于项目根目录的路径吗?您可以通过内置的 fnamemodify() 函数(在上面的 setreg() 调用中)进行转换。 - Ingo Karkat
2
太好了,就是这样!我只是将那一行改成了 call setreg('"', (fnamemodify(n.path.str(), ':.'))),然后魔法就发生了!再次感谢你! - Tárcio Zemel
@TárcioZemel 看起来 fnamemodify()周围的括号不是必需的。 - jdhao

6

我在快速谷歌搜索中找到了关于 NERDTree 的信息:CopyPath

然而,听起来你正在尝试将 vim 变成 Sublime Text。Vim 在文本编辑方面的哲学与大多数文本编辑器有很大不同。就我个人而言,通常最好与 vim 协作而非对抗它。这是 Drew Neil 的 Vimcasts 上一篇很好的文章,解释了 拆分资源管理器的好处

也许更符合 vim 的方式是使用文件完成来插入路径。在插入模式下,你可以通过按下 <c-x><c-f> 触发此完成,然后通过 <c-p><c-n>(分别为上一个和下一个)浏览菜单。如果要插入当前缓冲区的路径,可以通过 % 寄存器粘贴它,例如:"%p 或在插入/命令行模式下按下 <c-r>%

更多帮助请参见:

:h ins_completion
:h i_CTRL-R
:h quote%
:h registers

5
我想你需要的是类似sublime插件的上下文菜单吧?
这个功能已经内置于NERDTree中。
只需在所选节点上按下“m”键,就会弹出一个新窗口询问您想要做什么。基本功能包括:添加、删除、移动和复制。
还有一个插件可以让您搜索(使用grep),无论是单个文件还是整个目录都可以。
NERDTree还提供API,让您轻松构建任何自定义操作。

1
还有 (l) 列表选项,这可能是被询问的内容。 - valk
在所有的答案和评论中,@valk 的这条评论是我正在寻找的:一种简单的方法来复制所选文件的完整路径,这也是原始问题,据我所知。请注意,复制按下 m l 返回的文件路径取决于终端(有时需要按住 Shift 并双击,有时需要拖动文件路径并按下 Ctrl+C 等)。 - RyanQuey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接