Навигация по файлам Vim - PullRequest
       29

Навигация по файлам Vim

77 голосов
/ 18 сентября 2009

Я очень стараюсь выучить vim после использования TextMate в течение последних нескольких лет.

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

В моем рабочем процессе довольно часто я довольно регулярно переключаюсь между несколькими файлами (достаточно файлов, чтобы окна разделенной панели становились слишком маленькими). ​​

В настоящее время я использую NERDTree, но нахожу детализацию в каталогах громоздкой и постоянно использую CTRL + W h / CTRL + W l , чтобы прыгать туда-сюда.

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

Я также хотел бы использовать ярлык «Перейти к файлу ...», например CMD + T в TextMate. Я нашел fuzzy_file_finder, но для сборки vim нужно использовать привязки Ruby, а это не тот случай, когда я работал над нативными установками.

Хотя я могу перестроить основную причину, по которой я хочу перейти на vim, - чтобы у меня была одна среда редактора, которая, как я знаю, будет легко работать на любой платформе.

Возможности, предлагаемые здесь, подавляют любые идеи, высоко ценятся!

Ответы [ 15 ]

1 голос
/ 19 сентября 2009

знаете ли вы приложение MacVim? Он отполирован для OS X, и одной из его функций является поддержка вкладок (CMD + T, чтобы открыть новую вкладку), есть ящик и т. Д. (Читать это: http://zerokspot.com/weblog/2008/08/03/macvim-as-textmate-replacement/)

Попробуй!

С уважением Михал

1 голос
/ 19 сентября 2009

В дополнение к ответам wildmenu я использую плагин BufExplorer и следующие сопоставления для быстрого перехода по буферам:

nmap <A-1> :b 1<CR>
nmap <A-2> :b 2<CR>
nmap <A-3> :b 3<CR>
...
nmap <A-0> :b 10<CR>
nmap <A-=> \bs

Или вы можете просто заменить проводник буфера командой :ls, которая в основном отображает то же самое.

Последний отображает Alt-= для отображения обозревателя буфера.

Я не так часто пользуюсь Windows, так как у меня обычно только одно или два окна.

Я также изменил statusline, включив в него номер буфера %2n, чтобы я всегда знал, какой буфер редактируется. См :h statusline

1 голос
/ 18 сентября 2009

Я использую эту функцию для поиска файлов в подкаталогах, но я ее не написал. Это из vim wiki :

function! Find(name) 
    let l:list=system("find . -name '".a:name."' | grep -v \".svn/\" | perl -ne 'print \"$.\\t$_\"'") 
    let l:num=strlen(substitute(l:list, "[^\n]", "", "g")) 
    if l:num 0 
            echo "Not a number" 
            return 
        endif 
        if l:inputl:num 
            echo "Out of range" 
            return 
        endif 
        let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") 
    else 
      let l:line=l:list 
    endif 
    let l:line=substitute(l:line, "^[^\t]*\t./", "", "") 
    execute ":e ".l:line 
endfunction 

command! -nargs=1 Find :call Find("") 

Одна вещь, которая мне нравится, это поддержка групповых символов (*). Это также хорошо ведет себя для нескольких матчей.

0 голосов
/ 18 сентября 2009

Мой рабочий процесс поиска файлов - это wildmenu, autocwd и :e.

Соответствующие детали в .vimrc:

set wildmenu
set wildignore=*.dll,*.o,*.pyc,*.bak,*.exe,*.jpg,*.jpeg,*.png,*.gif
set wildmode=list:full
set autochdir
let g:netrw_list_hide='^\.,.\(pyc\|pyo\|o\)$'

И как им пользоваться:

:e myf^D

Это дает все файлы в текущем каталоге, которые начинаются с myf. Вы также можете <Tab> через них. Используйте возврат, чтобы открыть:)

^D всегда даст вам все совпадения. Поскольку autocmd всегда идет в папку текущего файла, с ним легко работать. Если вы находитесь в foo/bar.py и хотите перейти на foo/baz.py, вы только делаете :e baz.py и вы там. Это также работает с буферами (:b foo^D перечисляет все буферы, начинающиеся с foo)

0 голосов
/ 18 сентября 2009

Вот что-то довольно тривиальное, что я втыкаю в свои .vimrc. Он загрузит файл из любого подкаталога.

" load from an unspecified subdirectory 
function! LoadFromSubdirectory(filespec) 
  let filename = glob("`find . -name '" . a:filespec . "' -print`") 
  exe ':e '.filename 
endfunction 
:command -nargs=1 Er :call LoadFromSubdirectory(<f-args>) 

Так что я могу просто сказать:

: Er Main.java

, и он будет искать подкаталоги, найти Main.java и загрузить его. Он не очень хорошо работает для нескольких файлов с одним и тем же именем, но он быстрый и простой.

Другой инструмент, который я использую, - VTreeExplorer , который предоставляет основанное на дереве окно файлов / каталогов и не требует каких-либо специальных параметров сборки из VIM (т.е. это ванильный плагин). *

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