Какой традиционный способ навигации по проекту - PullRequest
4 голосов
/ 28 сентября 2010

Просто переместившись из textmate в vim, мне любопытно. Чтобы иметь возможность эффективно ориентироваться в моем проекте, я установил command-t и ack.vim. Оба они кажутся относительно новыми проектами в истории vim. Что люди обычно делают, чтобы перемещаться по проекту, когда они работают в vim, они просто используют файловый менеджер или есть какой-то трюк старой школы, о котором я не знаю?

Ответы [ 8 ]

9 голосов
/ 29 сентября 2010

Я правильно установил path, тогда для большинства вещей используйте find. Иногда я просто полагаюсь на теги. Тэги позволяют завершить табуляцию, но поиск - нет.

в моем vimrc:

set path=src/**;c:/work,scripts/**;c:/work

тогда

:find foobar.cpp

Включит foobar.cpp, если он существует в папке src / где-то вокруг моего текущего каталога (повторяет поиск, пока не будет нажата c: / work), а затем проверит иерархию скриптов.

:tag FooBar

просто приводит меня прямо к определению этого класса, так как я использую ctags для тегирования моего исходного кода на C, а также написал сценарий для генерации тегов для внутреннего DSL.

4 голосов
/ 29 сентября 2010

Честно? Я редко открываю файл кода по имени. По большей части я использую ctags с ctrl-] для перемещения по файлам (следуя определениям между файлами), а также ctrl-t, ctrl-i и ctrl-o. В редких случаях я хочу открыть файл по имени, для этого предназначено окно оболочки / проводника.

4 голосов
/ 28 сентября 2010

Что я обычно использую:

  1. Для открытия новых файлов: :e с завершением табуляции или :Ex (открыть проводник в каталоге текущего файла).

  2. Для перехода между файлами в списке буферов (:ls): плагин taglist или :b и его завершение табуляции.Обратите внимание, что для :b табуляция работает для подстрок.Например, если у вас есть два файла в списке буферов: module.h и module.cpp, вы можете ввести :b cpp и tab завершит module.cpp.Очень удобно!

Для завершения табуляции я также рекомендую обязательное wildmenu (:set wildmenu :set wildmode=full)

4 голосов
/ 28 сентября 2010

Я использую NerdTree , и с ним я могу управлять практически всем.

3 голосов
/ 28 сентября 2010

Я также использую только основные команды для работы с файлами и буферами для управления своими проектами.Тем не менее, я обнаружил, что следующие плагины также облегчают работу:

  • Fuzzy Finder (делает открытие файлов более приятным)
  • NERDTree (уже упоминалось, делает хороший просмотр проводника каталогов)
  • Taglist (полезно для навигации по файлу)
  • alternate.vim (полезно для языков программирования, таких как C ++ с соответствующими типами файлов .h и .cpp)
  • MiniBufExplorer (делаетлегче отслеживать буферы)

Кроме того, просто переназначение: bn и: bp во что-то более простое делает переключение буферов более приятным.Например:

nmap <C-n> :bn<cr>

nmap <C-p> :bp<cr>

Наконец, это не было упомянуто, но это связано с типом управления проектами, обязательно ознакомьтесь свстроенная функция редактирования-компиляции

  • : help quickfix

Я обнаружил, что многие люди, впервые пришедшие на vim, не замечают этого сразу.

3 голосов
/ 28 сентября 2010

"Традиционно?" Я использовал :Sex в течение многих лет. Это и завершение табуляции для имен файлов не делает это настолько плохим. Даже во вложениях каталогов глубиной 8 или 9, используя /mo, чтобы перейти к каталогу "models", нажмите o, чтобы открыть его ... и т. Д. И т. П.

Я установил Command-T на одну машину, что приятно, но ничто не сравнится с надежностью netrw

3 голосов
/ 28 сентября 2010

Многие люди просто используют обычный файловый менеджер в командной строке bash или Windows Explorer или что-то еще и открывают файлы по мере необходимости.Для навигации по существующим исходным деревьям очень полезны cscope и ctags.Я нахожу плагин project действительно полезным для IDE-подобной навигации по проектам и файлам: он, как правило, является основным способом навигации по моему исходному дереву.В сочетании с ctags, cscope, command-t и ack навигация, как правило, может быть очень быстрой.

1 голос
/ 02 декабря 2015

Я понимаю, что это может быть слишком поздно, но я надеюсь, что это будет кому-то полезно.

У нас относительно большой проект по работе около тысячи файлов кода C / C ++, php и shell скрипты, конфиги и прочее.

Для навигации по файлам я использую следующие опции.

Сначала , я использую простую оболочку grep, хранящуюся в моем .vimrc, чтобы найти конкретную строку в файлах:

function MyGrep( pattern, path, case, whole )
    execute "normal! GoSearch text " . a:pattern . " in " . a:path . " and subdirs, case: " .a:case. " whole: ".a:whole
    "E - extended regexp, l - display filenames only, r - search recursively
    let l:keys = "Elr"
    if a:case == 0
        "case-sensitive
        let l:keys = l:keys . "i"
    endif
    if a:whole != 0
        "whole words only
        let l:keys = l:keys . "w"
    endif
    let l:cmd = "r!grep -" . keys . " -e \"" . a:pattern ."\" "
    let l:cmd2 = a:path . " --exclude=*.ncb --exclude=*.o --exclude=*.d --exclude-dir=.svn --exclude-dir=.d --exclude-dir=rc.d --binary-files=without-match"
    echo l:cmd . l:cmd2
    execute l:cmd . l:cmd2
endfunction

com -nargs=1 GrepHere          call MyGrep( <q-args>, "./", 0, 0)
com -nargs=1 GrepHereCaseWhole call MyGrep( <q-args>, "./", 1, 1)
com -nargs=1 GrepHereCase      call MyGrep( <q-args>, "./", 1, 0)
com -nargs=1 GrepHereWhole     call MyGrep( <q-args>, "./", 0, 1)

В Windows я использую vimgrep и список изменений с этой командой (также в .vimrc):

command -nargs=1 VGCodeHere :vimgrep /<args>/j ./**/*.{c,cpp,h,rc} | copen

Оба «greppers» зависят от текущего рабочего каталога, поэтому не забудьте установить его правильно. Я обычно открываю новую безымянную вкладку в Vim и использую там эти команды поиска, чтобы сбросить туда файл имена, которые меня интересуют, результаты поиска, журналы местоположений и другая информация.

Второй , утилита cscope и плагин для Vim - это очень удобный способ просмотра файлов, функции, символы в проекте, но если вы имеете дело с исходниками C / C ++.

Третий , нативные трюки Vim, такие как

  • :e ./**/filename.cpp, чтобы открыть filename.cpp где-нибудь в поддереве файловой системы. Поддерживает завершение имени файла.
  • :tabe %<.h чтобы открыть соответствующий файл заголовка (вы можете изменить расширение .h на любое другое)
  • :Ex для навигации, используя встроенный браузер файловой системы
  • Ctrl-O, Ctrl-I для перемещения вперед и назад в списке переходов Vim

И чтобы в следующий раз вернуться из того же состояния Vim, я использую сессий . Сохранить сессию в Vim с :mksession sessionname.vis и запустите vim с сеансом: vim -S sessionname.vis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...