Vim语言:将当前单词发送到CtrlP

时间:2015-05-22 07:00:05

标签: vim ctrlp

我知道如何使用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

4 个答案:

答案 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-]>跳转到tagsctags的声明。

gf

答案 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>