2015-05-22 13 views
5

Tôi biết cách sử dụng CtrlP. Tôi gõ ctrl + p, sau đó tôi bắt đầu viết tên tập tin, ... và vân vân. Nhưng, ... Tôi là nhà phát triển rất lười biếng. Tôi muốn gửi trực tiếp đến từ hiện tại của CtrlP. Tôi biết cách nhận từ hiện tại:Ngôn ngữ Vim: gửi từ hiện tại tới CtrlP

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

Trong ngôn ngữ Vim, ... Tôi làm cách nào để gửi l: currentWord tới 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

đồ w – lollo

+0

Tôi có thể lập bản đồ bên trong một hàm? – sensorario

+0

Tại sao bạn muốn thực hiện điều này bên trong chức năng? – lollo

Trả lời

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

Xem :h ctrlp-mappings. Bạn có thể lập bản đồ kết hợp này:

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

Trong một hàm:

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

Tôi không cần phải remapping. – sensorario

1

Cho rằng, bạn sẽ không sử dụng các bản đồ <C-P>, nhưng lệnh :CtrlP, như một mất các thông số.

Để xây dựng ánh xạ chuyển từ hiện tại tới lệnh, có hai cách tiếp cận. Hoặc trực tiếp chèn từ hiện tại vào dòng lệnh (thông qua :help c_CTRL-R_CTRL-W):

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

Hoặc, để sử dụng expand(), xây dựng các lệnh Ex qua :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> 

(này có thể có thể được đơn giản hóa nhưng tôi hút theo cú pháp vim)

+0

CtrlP không phải là lệnh biên tập ... – sensorario

+0

Tại đây - https://github.com/kien/ctrlp.vim - nó nói là vậy. – Dummy00001

+0

Tôi đã thử đoạn mã đó trong .vimrc trước khi đăng nó ở đây, và nó thực hiện công việc. –

3

Toàn bộ điểm của CtrlP và các plugin tương tự là cung cấp một dòng lệnh thay thế mà yo u có thể tinh chỉnh tìm kiếm của bạn khi bạn nhập.

Nếu bạn không cần tìm kiếm mờ và bạn đã có tên tệp dưới con trỏ… tại sao không chỉ đơn giản là sử dụng tích hợp gf?

- chỉnh sửa -

Trong gif dưới đây:

  • tôi nhảy đến /path/not/knowable/BlaBlaClassName.php với gf,
  • tôi nhảy trở lại bộ đệm trước với <C-^> (không liên quan đến câu hỏi của bạn),
  • Tôi chuyển đến khai báo BlaBlaClassName trong /path/not/knowable/BlaBlaClassName.php một lần nữa với <C-]> nhờ tệp tags được tạo với ctags.

gf

+0

Vì gf không hoạt động. Tôi đang làm việc với PHP. – sensorario

+0

Tại sao 'gf' không hoạt động với PHP? – romainl

+0

Vâng, ... nếu tôi đang ở trên BlaBlaClassName, làm thế nào có thể gf mở một tập tin được đặt trong /path/not/knowable/SomeFileName.php? – sensorario

Các vấn đề liên quan