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

使用NERDtree Vim插件复制路径文件,vim,sublimetext,nerdtree,Vim,Sublimetext,Nerdtree,在Vim的NERDtree插件中是否有复制文件路径的方法 更好:是否有一些插件可以执行与Sublime Text插件相同的操作?这是我通过快速谷歌为NERDTree找到的: 然而,听起来你好像在试图把vim变成一个崇高的文本。Vim在文本编辑方面的理念往往与大多数文本编辑器截然不同。在我个人看来,与vim合作通常比反对它要好。这是Drew Neil写的一篇很好的帖子,解释了这个问题 可能vim插入路径的更多方式是使用文件完成。在插入模式下,您可以按触发此完成,然后使用和浏览菜单(分别为上一个和下

在Vim的NERDtree插件中是否有复制文件路径的方法


更好:是否有一些插件可以执行与Sublime Text插件相同的操作?

这是我通过快速谷歌为NERDTree找到的:

然而,听起来你好像在试图把vim变成一个崇高的文本。Vim在文本编辑方面的理念往往与大多数文本编辑器截然不同。在我个人看来,与vim合作通常比反对它要好。这是Drew Neil写的一篇很好的帖子,解释了这个问题

可能vim插入路径的更多方式是使用文件完成。在插入模式下,您可以按
触发此完成,然后使用
浏览菜单(分别为上一个和下一个)。如果要插入当前缓冲区路径,可以通过
%
寄存器粘贴它,例如
%p
或在插入/命令行模式下按
%

有关更多帮助,请参阅:

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

我想你真正需要的是一个像升华插件这样的上下文菜单

那是NERDTree内置的

只需在突出显示的节点上点击
m
,您将看到一个新窗口弹出,询问您想做什么。基本功能有:添加、删除、移动、复制

还有一个插件可以让你搜索(使用grep),无论是单个文件还是整个突出显示的目录


NERDTree还为您在该上下文窗口中轻松构建的任何自定义操作提供了API。

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
),并注册(
;使用
+
作为剪贴板)。

请编辑您的问题以解释a)ST插件的功能和b)为什么Vim中的等效功能不符合要求。另外,一旦复制了该文件名,您希望如何处理该文件名?是否将其插入当前缓冲区?将它粘贴到另一个程序中?当心XY问题。很好的提示,Ingo!它可以工作,但是有一种方法可以从项目根复制路径,而不是从项目根复制路径。@TárcioZemel:你的意思是,相对于项目根的路径?您可以通过内置的
fnamemodify()
函数(在上面的
setreg()
调用中)对其进行转换!我刚刚把那行代码改成了调用setreg(“”,(fnamemodify(n.path.str(),“:”),神奇的事情发生了!再次感谢你!@TárcioZemel似乎不需要在
fnamemodify()
周围加括号。还有(l)列表选项,这可能是所有答案和评论中被问及的内容,@valk的这条评论正是我想要的:一种将完整路径复制到所选文件的简单方法,据我所知,这也是原始问题。请注意,复制按
m l
返回的文件路径取决于终端(有时按住shift键并双击,有时拖动文件路径和ctrl+c等)。