Навигация по Vim
Я пытаюсь очень усердно изучить vim после использования TextMate в течение последних нескольких лет.
Я начал фиксировать некоторую часть навигации по файлам в памяти, но я борюсь с переходом между несколькими файлами.
В моем рабочем процессе довольно распространено, что я просматриваю несколько файлов довольно регулярно (достаточно файлов, чтобы окна с разделенной панелью стали слишком маленькими).
В настоящее время я использую NERDTree, но нахожу сверление в каталоги громоздким, а также постоянно используя CTRL + W h/CTRL + W l для перехода назад и вперед.
Я думаю, что мне бы лучше с вкладками, которые я могу легко переключаться между ними, но, возможно, мне нужно использовать другой рабочий процесс.
Мне также понравится ярлык "Перейти к файлу...", например CMD + T в TextMate. Я нашел fuzzy_file_finder
, но для этого требуется, чтобы vim был построен с привязками Ruby, что не относится к родным установкам, над которыми я работал,
В то время как я мог перестроить основную причину, по которой я хочу переключиться на vim, так что я могу иметь одну среду редактора, которая, как я знаю, будет легко работать на любой платформе.
Варианты там подавляющие, любые идеи очень ценятся!
Ответы
Ответ 1
Я не нахожу сверление в подкаталоги через обычный старый :e
, чтобы быть громоздким, учитывая приличную конфигурацию для завершения табуляции.
Посмотрите на параметр 'wildmenu'
, чтобы Vim показывал список завершений (имена файлов) в моделировании над командной строкой. Вы можете изменить параметр 'wildmode'
, чтобы дополнительно настроить вид заполнения вкладки, который сделает Vim.
Лично я использую :set wildmode=full
.
Мой рабочий процесс выглядит следующим образом:
Я также использую эти сопоставления, чтобы облегчить открывание новых окон и перепрыгивать между ними, потому что это то, что я делаю так часто.
" Window movements; I do this often enough to warrant using up M-arrows on this"
nnoremap <M-Right> <C-W><Right>
nnoremap <M-Left> <C-W><Left>
nnoremap <M-Up> <C-W><Up>
nnoremap <M-Down> <C-W><Down>
" Open window below instead of above"
nnoremap <C-W>N :let sb=&sb<BAR>set sb<BAR>new<BAR>let &sb=sb<CR>
" Vertical equivalent of C-w-n and C-w-N"
nnoremap <C-w>v :vnew<CR>
nnoremap <C-w>V :let spr=&spr<BAR>set nospr<BAR>vnew<BAR>let &spr=spr<CR>
" I open new windows to warrant using up C-M-arrows on this"
nmap <C-M-Up> <C-w>n
nmap <C-M-Down> <C-w>N
nmap <C-M-Right> <C-w>v
nmap <C-M-Left> <C-w>V
Мне нужно несколько секунд, чтобы открыть Vim, настроить некоторые окна и открыть несколько файлов. Лично я никогда не обнаружил, что любой из сторонних скриптов просмотра файлов очень полезен.
Ответ 2
Простым способом просмотра файловой системы является команда:
:Sex
Я не делаю этого:)
Ответ 3
:Sex
, :Vex
, :Tex
и :Ex
- все полезные команды для ex (ploring) файлов в вашей системе, если вы хотите использовать что-то отличное от :e
(где S/V/T
являются короткими для Split/Vertical/Tab)
Ответ 4
Если вы еще не нашли их, вы можете проверить:
- оригинальный плагин нечеткого поиска - у IIRC нет проблем с привязкой Ruby.
- Плагин проекта - аналогичен NERDTree
- плагин explorer для буфера - отображает список открытых буферов
Также имейте в виду, что вы можете переназначить ключевые ярлыки в своем .vimrc, чтобы сделать их менее громоздкими. Я использую разделенные окна много; Я нашел следующее дело с ними гораздо проще:
" set your own personal modifier key to something handy
let mapleader = ","
" use ,v to make a new vertical split, ,s for horiz, ,x to close a split
noremap <leader>v <c-w>v<c-w>l
noremap <leader>s <c-w>s<c-w>j
noremap <leader>x <c-w>c
" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h
Ответ 5
Я нахожу LustyExplorer лучшим до сих пор.
Вы можете открыть файл, введя только часть его имени.
Вы можете открыть файл из каталога текущего файла или текущего pwd
или из списка буферов.
Если вы открываете файл из списка буферов, вам не нужно перемещаться по дереву каталогов, но, к сожалению, для двух других режимов вам все равно придется перемещаться по дереву. Хорошо, что вам не нужно начинать с первого персонажа.
Если у вас есть:
dir_a/
...
dir_b/
file.js
file.html
и вы хотите открыть dir_b/file.html
, вы можете найти его, набрав b<Tab>h
Ответ 6
Думаю, мне лучше с вкладками я может легко переключаться между ними, но, может быть, я необходимо использовать другой рабочий процесс.
Знаете ли вы о вкладках Vim? Не уверен, что вы ссылались на собственные вкладки Vim или наклон для TextMate. Непонятно, какую версию Vim вы используете, но у нее были вкладки с по крайней мере 7.0 (что, кажется, установлено повсюду, где я смотрю в последнее время), и они потрясающие.
:tabe
открывает новый (короткий для "редактирования вкладки", например, :tabe
для пустого или :tabe path/to/file
для открытия файла на новой вкладке), вы можете перемещаться между соседними вкладками с помощью gt
/gt
, и там также есть множество других команд навигации, связанных с вкладками, как вы могли бы ожидать от Vim (:help tabs
)
Мой рабочий процесс для больших проектов имеет тенденцию включать в себя множество вкладок, каждый из которых имеет от 1 до 3 окон в зависимости от того, какой контекст мне нужен. Это работает еще лучше, если у меня есть двойное окно терминала, так как я могу вертикально разделить на :vs
, поэтому одна вкладка может легко показать мне 4 файла одновременно с большим количеством места для каждого.
Окончательный совет: иногда я использую команду "switch buffer" (:sb <partial_buf_name>
), которая является sorta-kinda, как TM-нечеткое обнаружение, поскольку она работает очень хорошо, но только для уже открытых буферов. Все еще замечательно, когда я открываю сразу несколько десятков или более файлов. (N.B. Мне нужно было :set switchbuf=usetab
в моем vimrc для этого, чтобы работать с вкладками, но как только это установило его.)
Ответ 7
Посмотрите плагин ctrlp в качестве альтернативы плагину Команда-Т. Это лучше, чем в том, что это "родной" Vim script и не нуждается в компиляции Vim с ruby (или другой поддержкой), пока он работает очень быстро и ненавязчиво.
Ответ 8
Если файл, который вы хотите, уже загружен в буфер (что, вероятно, если вы периодически перемещаетесь между несколькими файлами), вы можете быстро переключиться на буфер с помощью команды :b[uffer]
.
:b
может принимать номер буфера в качестве параметра или (более полезно) строку, которая соответствует части пути/имени файла. Если есть несколько совпадений, вы можете использовать вкладку, чтобы перебирать их.
Если вы хотите разбить окно и открыть буфер в новом окне, используйте :sb name
Если вы хотите открыть буфер на новой вкладке, используйте :tab b name
Вы также можете использовать команду :ls
, чтобы просмотреть список загруженных буферов.
Ответ 9
Удивительно, что команда :find
не упоминалась ни в одном из ответов. Обычно я работаю с рельсовыми проектами, где мне нужно глубоко развернуть иерархию каталогов. Поэтому для файла application.css
, расположенного в app/assets/stylesheets/
, все, что я должен ввести, это :find applica
, а затем нажмите вкладка для автозаполнения и введите, чтобы открыть.
Ответ 10
Я использую эту функцию для поиска файлов в подкаталогах, но я ее не писал. Это из 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("")
Одна вещь, которая мне нравится, это поддержка подстановочных знаков (*). Он также хорошо вел себя для нескольких совпадений.
Ответ 11
В дополнение к ответам 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
Или вы можете просто заменить explorer буфера командой :ls
, которая в основном отображает одно и то же.
Последний отображает Alt-=
, чтобы отобразить проводник буфера.
Я не очень сильно использую Windows, поскольку у меня обычно есть только одно или два окна.
Я также изменил statusline
, чтобы включить номер буфера %2n
, так что я всегда знаю, какой буфер редактируется. См. :h statusline
Ответ 12
Вы знаете приложение MacVim? Это VIM отполировано для OS X, и одной из его функций является поддержка вкладок (CMD + T для открытия новой вкладки), у нее есть ящик и т.д. (Читайте это: http://zerokspot.com/weblog/2008/08/03/macvim-as-textmate-replacement/)
Попробуйте!
Отношения
Михал
Ответ 13
Здесь что-то довольно тривиальное, что я придерживаюсь в .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 (т.е. это ванильный плагин).
Ответ 14
Мой рабочий процесс для поиска файлов - это 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>
через них. Используйте return to open:)
^D
всегда будет давать вам все матчи. Поскольку autocmd всегда идет в папку текущего файла, с которой легко работать. Если вы находитесь в foo/bar.py
и хотите перейти на foo/baz.py
, вы делаете :e baz.py
, и вы там. Это также работает с буферами (:b foo^D
перечисляет все буферы, начинающиеся с foo)
Ответ 15
NerdTree лучше всего подходит для навигации по файлам в vim.
Ссылка ниже - хорошее введение в nerdtree.
http://www.catonmat.net/blog/vim-plugins-nerdtree-vim/