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

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

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

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

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

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

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

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

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

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

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

Ответы [ 15 ]

232 голосов
/ 05 марта 2010

Простой способ просмотра файловой системы - это команда:

:Sex

Я не придумываю это:)

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

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

Просмотрите параметр 'wildmenu', чтобы Vim отображал список завершений (имен файлов) в строке состояния над командной строкой. Вы можете изменить параметр 'wildmode' для дальнейшей настройки вида завершения табуляции, которое будет делать Vim.

Лично я пользуюсь :set wildmode=full.

Мой рабочий процесс выглядит так:

  1. :cd в каталог верхнего уровня моего проекта.
  2. Открыть файл foo/bar/baz:

    • Простейший сценарий: введите :e f<tab>b<tab>b<tab><enter>.

    • Если в одном из этих каталогов имеется более одного файла, начинающегося с b, вам, возможно, придется выполнить на клавиатуре <left> или <right> или другой <tab>, чтобы перейти между ними (или введите еще несколько букв для устранения неоднозначности).

    • В худшем случае есть файлы и каталоги, которые имеют общее имя, и вам нужно углубиться в каталог. В этом случае завершите вкладку именем каталога и введите *<tab>, чтобы развернуть.

  3. Откройте 2 или 3 окна и при необходимости откройте файлы во всех них.
  4. Как только файл открыт в буфере, не уничтожайте буфер. Оставьте его открытым в фоновом режиме при открытии новых файлов. Просто :e новый файл в том же окне.
  5. Затем используйте :b <tab> для циклического перебора буферов, которые уже открыты в фоновом режиме. Если вы введете :b foo<tab>, он будет сопоставляться только с открытыми в данный момент файлами, которые соответствуют foo.

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

" 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, настроить некоторые окна и открыть в них несколько файлов. Лично я никогда не находил какие-либо сторонние сценарии просмотра файлов очень полезными.

38 голосов
/ 06 января 2013

:Sex, :Vex, :Tex и :Ex - все полезные команды для ex (записи) файлов в вашей системе, если вы хотите использовать что-то отличное от :e

(где S/V/T - сокращение от Split / Vertical / Tab)

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

Если вы еще не нашли их, вы можете проверить:

  • оригинальный плагин нечеткого поиска - у которого IIRC не имеет проблем с привязкой к Ruby
  • Плагин Project - похож на NERDTree
  • плагин проводника буфера - показывает список открытых буферов

Также имейте в виду, что вы можете переназначить сочетания клавиш в вашем .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 голосов
/ 18 сентября 2009

Я считаю LustyExplorer лучшим на данный момент.

Вы можете открыть файл, введя только часть его имени.

Вы можете открыть файл из каталога текущего файла, или текущего pwd, или из списка буферов.

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

Если у вас есть:

dir_a/
    ...
dir_b/
    file.js
    file.html

и вы хотите открыть dir_b/file.html, вы можете найти его, набрав b<Tab>h

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

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

Вам известны вкладки 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>), которая вроде как нечеткое обнаружение ТМ, в том смысле, что она работает довольно хорошо, но только для уже открытых буферов. Тем не менее отлично подходит для случаев, когда у меня одновременно открыто десяток или более файлов. (N.B. Мне нужно было :set switchbuf=usetab в моем vimrc, чтобы это работало на вкладках, но как только оно установлено, это здорово.)

3 голосов
/ 02 апреля 2013

Проверьте плагин ctrlp в качестве альтернативы плагину Command-T . Это лучше, чем этот, потому что это «родной» скрипт Vim, и он не требует компиляции Vim с помощью ruby ​​(или другой поддержки), хотя он работает очень быстро и ненавязчиво.

2 голосов
/ 30 мая 2017

Удивительно, что команда :find не была упомянута ни в одном из ответов. Я обычно работаю с проектами rails, где мне нужно углубиться в иерархию каталогов. Таким образом, для файла application.css, расположенного в app/assets/stylesheets/, все, что мне нужно набрать, это :find applica, а затем нажмите tab для автозаполнения и введите , чтобы открыть.

2 голосов
/ 05 марта 2010

Если нужный файл уже загружен в буфер (что, вероятно, если вы регулярно переключаетесь между несколькими файлами), вы можете быстро переключиться в буфер с помощью команды :b[uffer].

:b может принимать номер буфера в качестве параметра или (что более полезно) строку, которая соответствует часть пути / имени файла. Если есть несколько совпадений, вы можете использовать вкладку для их циклического переключения.

Если вы хотите разбить окно и открыть буфер в новом окне, используйте :sb name

Если вы хотите открыть буфер в новой вкладке, используйте :tab b name

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

1 голос
/ 15 марта 2014

NerdTree лучше всего подходит для навигации по файлам в vim.

Ссылка ниже является хорошим введением в ботаническое дерево.

http://www.catonmat.net/blog/vim-plugins-nerdtree-vim/

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