2015-05-22 5 views
5

Ich kann CtrlP verwenden. Ich tippe ctrl + p, dann fange ich an, den Dateinamen zu schreiben, und so weiter. Aber, ich bin ein sehr fauler Entwickler. Ich möchte direkt an CtrlP das aktuelle Wort senden. Ich weiß, wie das aktuelle Wort zu bekommen:Vim Sprache: aktuelles Wort an CtrlP senden

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

In Vim Sprache, ... ich Wie kann ich l senden: currentWord zu 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

Karte w – lollo

+0

Kann ich in einer Funktion zuordnen? – sensorario

+0

Warum möchten Sie dies innerhalb der Funktion tun? – lollo

Antwort

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

:h ctrlp-mappings See. Sie können diese Kombination Karte:

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

In einer Funktion:

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

Ich brauche keine Neuzuordnung. – sensorario

1

Dafür würden Sie nicht die <C-P> Mapping verwenden, aber die :CtrlP Befehl, wie man nimmt Parameter.

Um ein Mapping zu erstellen, das das aktuelle Wort an den Befehl übergibt, gibt es zwei Ansätze. Entweder direkt einzufügen das aktuelle Wort in der Befehlszeile (via :help c_CTRL-R_CTRL-W):

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

Oder um expand() zu verwenden, bauen den Befehl Ex über :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> 

(Diese könnte wahrscheinlich vereinfacht werden, aber ich lache bei vim syntax)

+0

CtrlP ist kein Editor-Befehl ... – sensorario

+0

Hier - https://github.com/kien/ctrlp.vim - es heißt es. – Dummy00001

+0

Ich habe dieses Snippet in meinem .vimrc ausprobiert, bevor ich es hier poste, und es macht den Job. –

3

Der ganze Sinn von CtrlP und ähnlichen Plugins ist es, eine alternative Befehlszeile, wo yo Sie können Ihre Suche während der Eingabe verfeinern.

Wenn Sie keine Fuzzy-Suche benötigen und den Dateinamen bereits unter dem Cursor haben ... warum nicht einfach das eingebaute gf verwenden?

- bearbeiten -

Im gif unter:

  • ich mit gf-/path/not/knowable/BlaBlaClassName.php springen,
  • ich mit <C-^> (ohne Bezug zu Ihrer Frage) zum vorherigen Puffer zurückspringen,
  • Ich spreche zur Deklaration von BlaBlaClassName in /path/not/knowable/BlaBlaClassName.php wieder mit <C-]> Dank einer tags Datei mitgeneriert.

gf

+0

nicht neu zugeordnet, weil GF nicht funktioniert. Ich arbeite mit PHP. – sensorario

+0

Warum würde 'gf' nicht mit PHP funktionieren? – romainl

+0

Nun, ... wenn ich auf BlaBlaClassName bin, wie kann ich eine Datei in /path/not/knowable/SomeFileName.php öffnen? – sensorario

Verwandte Themen