2015-05-22 11 views
5

So come usare CtrlP. Digito ctrl + p, quindi inizio a scrivere il nome del file, ... e così via. Ma ... sono uno sviluppatore molto pigro. Voglio inviare direttamente a CtrlP la parola corrente. So come ottenere parola corrente:Lingua Vim: invia la parola corrente a CtrlP

let l:currentWord = expand('<cword>') 

In Vim lingua, ... I Come posso inviare l: currentWord a 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

mappa w – lollo

+0

Posso mappare all'interno di una funzione? – sensorario

+0

Perché vuoi farlo all'interno della funzione? – lollo

risposta

10
<C-P><C-\>w 

Vedi :h ctrlp-mappings. Si può mappare questa combinazione:

map <F6> <C-P><C-\>w 

In una funzione:

exe "normal \<C-P>" . expand('<cword>') 
+0

Non ho bisogno di rimappare. – sensorario

1

Per questo, non si utilizzare la mappatura <C-P>, ma il comando :CtrlP, come quello prende i parametri.

Per creare una mappatura che passa la parola corrente al comando, ci sono due approcci. O inserire direttamente la parola corrente nella linea di comando (tramite :help c_CTRL-R_CTRL-W):

:nnoremap <Leader>p :CtrlP <C-r><C-p><CR> 

Oppure, al fine di utilizzare expand(), costruire il comando Ex via :execute:

:nnoremap <Leader>p :execute 'CtrlP' expand('<cword>')<CR> 
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> 

(questo potrebbe probabilmente essere semplificato ma faccio schifo alla sintassi vim)

+0

CtrlP non è un comando di editor ... – sensorario

+0

Qui - https://github.com/kien/ctrlp.vim - dice che lo è. – Dummy00001

+0

Ho provato quello snippet nel mio .vimrc prima di postarlo qui, e fa il lavoro. –

3

L'intero punto di CtrlP e plugin simili è quello di fornire una linea di comando alternativa dove yo puoi affinare la ricerca mentre digiti.

Se non hai bisogno di ricerca fuzzy e hai già il nome del file sotto il cursore ... perché non usare semplicemente il built-in gf?

- modifica -

Nella gif di seguito:

  • io salto a /path/not/knowable/BlaBlaClassName.php con gf,
  • io salto indietro nel buffer precedente con <C-^> (non correlato alla tua domanda),
  • Salto alla dichiarazione di BlaBlaClassName in /path/not/knowable/BlaBlaClassName.php di nuovo con <C-]> grazie a un file tags generato con ctags.

gf

+0

Perché gf non funziona. Sto lavorando con PHP. – sensorario

+0

Perché 'gf' non funziona con PHP? – romainl

+0

Bene, ... se sono su BlaBlaClassName, come posso aprire un file gf in /path/not/knowable/SomeFileName.php? – sensorario

Problemi correlati