Как добавить папку в проекты (например, Sublime Text) в VIM?

Я только что переключился с Sublime Text на GVIM (в Windows). Я все еще размышляю, стоит ли мне продолжать ST или полностью перейти на VIM. Одна функция, в которой я отчаянно нуждаюсь (или которой мне не хватает):

  1. Ctrl+P для перехода к любому файлу, который я хочу добавить в список папок.
  2. Ctrl+Shift+f, чтобы найти (и заменить) любой текст в этом списке папок.

Я добавил количество папок, используя функцию Add Folders to Project в Sublime Text 3. Это было действительно полезно. Теперь я знаю, что CtrlP плагин для VIM может делать то же самое, но я не могу понять, как заставить его искать нужные мне папки, а не корневой каталог текущего файла.

Я немного поиграл с установкой пути в моем файле vimrc, но без особого успеха.

Не могли бы вы помочь? Если это повторный вопрос, пожалуйста, извините меня.

Спасибо.


person NotepadPlusPlus PRO    schedule 19.08.2015    source источник
comment
Для поиска и замены я рекомендую ctrlsf.vim: github.com/dyng/ctrlsf.vim   -  person Zach    schedule 20.08.2015


Ответы (4)


Насколько я знаю, плагин ctrlp ищет только в одном каталоге (и его потомках). Используйте возможности Unix: создайте каталог со ссылками на интересующие вас внепроектные каталоги. Таким образом, ассоциация с внепроектными каталогами — это не просто то, о чем знает редактор, а то, что записано в реальном проекте. .

Поиск и замена немного сложнее. Вы хотите работать со всеми интересующими вас файлами, затем повторите команду замены для всех них. Например, если вы хотите выполнить поиск foo и заменить на bar во всех файлах C здесь и ниже,

:args **/*.c
:argdo %s/foo/bar/g
person Amadan    schedule 20.08.2015

  1. Ctrl+P, чтобы перейти к любому файлу, который мне нужен в моем списке папок.

    Команду :find можно использовать для «нахождения» файла в каталогах, указанных в параметре 'path':

    set path+=/some/arbitrary/path
    set path+=/another/one
    
    :find *foo
    

    Я нахожу эти два сопоставления очень удобными:

    nnoremap <key> :find *                                    " search in every directory
                                                              " in 'path'
    nnoremap <key> :find <C-R>=expand('%:p:h').'/**/*'<CR>    " start from the directory
                                                              " of the current file
    
  2. Ctrl+Shift+f, чтобы найти (и заменить) любой текст в этом списке папок.

    То, что amadan сказал выше.

person romainl    schedule 20.08.2015
comment
Спасибо Роменл. Я добавил свои папки, как вы указали. set path+=c:\project1` set path+=c:\project2. When I search using :find for the file that I know exist, it gives me the following error. E345: Не удается найти файл по пути. Я почти сдаюсь. ` - person NotepadPlusPlus PRO; 21.08.2015

Хороший переключатель! Итак, вы открыли для себя CtrlP. Он имеет встроенную обширную документацию. Используйте :h ctrlp, чтобы просмотреть полные vimdocs, объясняющие различные параметры. Он объяснит некоторые важные настройки для рабочих каталогов, которые очень важны для хорошего опыта работы с ним. Возьмем, к примеру, некоторые настройки, которые я использую:

" The one you really care about...
" Set root to CWD. Another good option is 'r' for VCS mode.
" You should start vim in the root of your project tree
let g:ctrlp_working_path_mode = 0
" You _can_ switch dirs
let g:ctrlp_extensions = ['dir']

" Avoid big/unimportant project areas
set wildignore+=*/node_modules/*,*/build/*,*/components/*,*/_public/*,*/tmp/*,*/vendor/*

" Cache -- get used to pressing F5 on tree changes/additions
let g:ctrlp_use_caching = 1
let g:ctrlp_clear_cache_on_exit = 0

" Somewhat self-explanatory
let g:ctrlp_show_hidden = 1
let g:ctrlp_switch_buffer = 2
let g:ctrlp_max_depth = 6
let g:ctrlp_max_height = 50

" Open *h*orizontally and *j*ump to first win.
let g:ctrlp_open_multiple_files = 'hj'
" Use <C-d> to toggle
"let g:ctrlp_by_filename = 1

Для получения дополнительной информации о том, где искать файлы за пределами вашего рабочего дерева, обратитесь к g:ctrlp_user_command. Существует пример Windows с использованием dir. Вы бы использовали это, но с желаемыми дополнительными путями.

Вы также можете добавить NerdTree, хорошее дополнение к CtrlP. Это напоминает боковую панель ST. Используйте его ?, чтобы получить помощь. В нем есть меню, которое позволяет вам быстро добавлять файлы и каталоги, возможно, как вы хотите из «Добавить папки в проект».

Для поиска и замены см. ag.vim. Я сопоставляю его с <leader>g (что означает «grep»).

Упомянутые являются одними из моих любимых, но вам следует изучить мир плагинов Vim, чтобы решить, какие другие стоит использовать. Я рекомендую пробовать по одному, пока вы новичок, а не иногда непрозрачный «дистрибутив». Инструменты для упрощения управления плагинами: Vundle / Pathogen (выберите один).

person Micah Elliott    schedule 20.08.2015
comment
Ни один из документов для CtrlP не учитывает желание OP иметь каталоги вне проекта, и Ag не может заменить. - person Amadan; 20.08.2015
comment
Спасибо Мика. Как упомянул Амадан, я прочитал документ CtrlP, но не смог найти способ использовать его для нескольких каталогов. Может ли кто-нибудь дать мне пример использования let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d' для Windows с несколькими каталогами. - person NotepadPlusPlus PRO; 20.08.2015
comment
У меня нет компьютера с Windows для экспериментов, но есть эта документация (см. раздел "Примеры") предлагает что-то вроде: `dir /ac:\some\dir\ c:\another\dir`. Если Cygwin является опцией, вы получите полнофункциональную команду поиска и улучшенную подстановку. - person Micah Elliott; 20.08.2015

Эврика...!!!!!

После неустанных поисков в течение нескольких дней (и бессонных ночей) я нашел свой ответ (пожалуйста, читайте дальше).

Сначала немного глупостей

Я так стремился не отказываться от Вима. Но эта проблема просто ела меня изнутри и мешала моему рабочему процессу. У меня есть много папок проектов в Windows, которые я хочу, чтобы vim искал. Ctrl+p почему-то никогда толком не работал. У меня были не очень приятные мысли отказаться от Vim. а потом я нашел это!

Мой ответ

Это немного отличается от того, что я ожидал. Но ответ - все (от VoidTools). Это позволяет искать из любого места и дает результаты за доли секунды. Это, безусловно, лучший инструмент для поиска файлов в Windows. Он поддерживает регулярное выражение. (хотя это не инструмент текстового поиска). Он имеет интерфейс командной строки, называемый

es.exe

с помощью подключаемого модуля Vim FindEverything.vim (FindEverything) я смог найти не только через мои папки проекта, но почти везде. Он возвращает результаты в буфер vim.

Всем спасибо за помощь. Я знаю, что не все могут согласиться с этим решением. Но в Windows это лучшее решение, которое я нашел! Надеюсь, это полезно для других, почему они в одной лодке !!!

person NotepadPlusPlus PRO    schedule 01.09.2015