Command-T, как использовать текущую закладку NERDTree в текущем файле в качестве каталога поиска?

Мне нравятся NERDTree и Command-T. Поэтому я хочу использовать файл поиска Command-T для текущего проекта. (Я использую закладку NERDTree как проект). Потому что Command-T использует :CommandT <path> для активного поиска, а по умолчанию <path> - pwd. Я хочу изменить <path> на собственный путь к закладке NERDTree текущего файла.

Вот так:

У меня есть закладка TestProject, а путь - ~/testproject.

Теперь я пишу файл ~/testproject/class/test.php. Если использовать :CommandT, я получу каталог поиска ~/testproject/class/. Но мне нужен поиск по глобальному проекту (_9 _), и я не хочу набирать :CommandT ~/testproject/.


person Kebin Liu    schedule 10.09.2013    source источник
comment
Вам следует определиться и выбрать один способ.   -  person romainl    schedule 10.09.2013
comment
Я с помощью скрипта Python создал плагин vim, реализованный в моей голове. Спасибо! :-)!   -  person Kebin Liu    schedule 10.09.2013
comment
github.com/liukebin/code/blob/master/vim/vimrc   -  person Kebin Liu    schedule 10.09.2013


Ответы (2)


Полностью игнорируя NERDTree, вы можете настроить сопоставление CommandT так, чтобы оно по умолчанию включало корень вашего проекта. Чтобы сделать его гибким, вы можете динамически загружать корень проекта для каждого сеанса vim из переменной среды:

"If the $H environment variable is available, assume it contains CommandT's root dir
if !empty($H)
  nnoremap <silent> <Leader>t :CommandT $H<CR>
else
  nnoremap <silent> <Leader>t :CommandT<CR>
endif

Или, проще говоря, вы можете использовать $ PWD, который должен отражать каталог, в котором вы начали свой vim сеанс.

Что касается предлагаемого вами решения, вы действительно можете cd в NERDTree, поместив курсор на узел, к которому вы хотите перейти, а затем нажав cd (см. :h NERDTree-cd). Это изменяет вывод _6 _ / _ 7_ для буфера NERDTree, и если вы запустите CommandT, находясь в буфере NERDTree, CommandT будет использовать новое значение для поиска. Проблема в том, что CommandT попытается открыть выбранный файл в буфере редактирования, к которому вы последний раз обращались, на что не влияет cding в NERDTree буфере. А теперь, поскольку версия 1.3.1 из CommandT пытается открыть выделение, используя относительный путь (относительный от :pwd из NERDTree buffer), это, скорее всего, не сработает.

Ниже приведен патч git-formatted для CommandT v1.3.1, чтобы заставить его работать:

From cf4569af2f5d06673d96ac0f798c22612b5579f5 Mon Sep 17 00:00:00 2001
From: Petr Skocik <[email protected]>
Date: Fri, 1 Aug 2014 02:10:35 +0200
Subject: [PATCH] open selection by its absolute rather than relative path

---
 ruby/command-t/controller.rb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ruby/command-t/controller.rb b/ruby/command-t/controller.rb
index 6026aca..4774345 100644
--- a/ruby/command-t/controller.rb
+++ b/ruby/command-t/controller.rb
@@ -240,6 +240,7 @@ module CommandT
       selection = File.expand_path selection, @path
       selection = relative_path_under_working_directory selection
       selection = sanitize_path_string selection
+      selection = VIM::pwd + '/' + selection
       ensure_appropriate_window_selection
       ::VIM::command "silent #{command} #{selection}"
     end
-- 
1.9.1
person PSkocik    schedule 01.08.2014