我知道如何使用CtrlP。我输入ctrl + p,然后我开始写文件名,......等等。但是,......我是一个非常懒惰的开发者。我想直接发送到CtrlP当前的单词。我知道如何获得当前的信息:
let l:currentWord = expand('<cword>')
在Vim语言中,...我如何将l:currentWord发送到CtrlP?
map <F6> :call ComposerKnowWhereCurrentFileIs()<CR>
function! ComposerKnowWhereCurrentFileIs()
let l:currentWord = expand('<cword>')
let l:command = "grep " . l:currentWord . " ../path/to/composer -R | awk '{print $6}' | awk -F\\' '{print $2}'"
let l:commandFileFound = l:command . ' | wc -l'
let l:numberOfResults = system(l:commandFileFound)
if l:numberOfResults == 1
let l:fileName = system(l:command)
let l:openFileCommand = 'tabe /path/to/project' . l:fileName
exec l:openFileCommand
else
echo "Too many files :-( - use CtrlP ;-) "
endif
endfunction
答案 0 :(得分:12)
<C-P><C-\>w
请参阅:h ctrlp-mappings
。您可以映射此组合:
map <F6> <C-P><C-\>w
在一个功能中:
exe "normal \<C-P>" . expand('<cword>')
答案 1 :(得分:3)
CtrlP和类似插件的重点是提供一个替代命令行,您可以在键入时优化搜索。
如果您不需要模糊搜索,并且光标下已有文件名...为什么不简单地使用内置的gf
?
- 编辑 -
在下面的gif中:
/path/not/knowable/BlaBlaClassName.php
,gf
<C-^>
(与您的问题无关)跳回上一个缓冲区,BlaBlaClassName
生成的/path/not/knowable/BlaBlaClassName.php
文件,我再次使用<C-]>
跳转到tags
中ctags
的声明。
答案 2 :(得分:2)
function! LazyP()
let g:ctrlp_default_input = expand('<cword>')
CtrlP
let g:ctrlp_default_input = ''
endfunction
command! LazyP call LazyP()
nnoremap <C-P> :LazyP<CR>
(这可能会简化,但我吮吸vim语法)
答案 3 :(得分:1)
为此,您不会使用<C-P>
映射,而是:CtrlP
命令,因为该命令采用参数。
要构建将当前单词传递给命令的映射,有两种方法。直接将当前单词插入命令行(通过:help c_CTRL-R_CTRL-W
):
:nnoremap <Leader>p :CtrlP <C-r><C-p><CR>
或者,为了使用expand()
,请通过:execute
构建Ex命令:
:nnoremap <Leader>p :execute 'CtrlP' expand('<cword>')<CR>