Навигация файла Vim

В C, int, по крайней мере, был предназначен для имения "естественного" размера слова ЦП, и long был, вероятно, предназначен, чтобы быть "большим естественным" размером слова (не уверенный в той последней части, но это также объяснит, почему int и long имеют тот же размер на x86).

Теперь, мое предположение: для int и long, существует естественное представление, которое соответствует точно регистрам машины. На большинстве центральных процессоров однако, меньшие типы byte и short должны были бы быть дополнены к int так или иначе прежде чем быть используемым. Если это так, у Вас может также быть бросок.

79
задан Andrew Hendrie 11 March 2015 в 21:08
поделиться

11 ответов

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

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

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

Мой рабочий процесс выглядит следующим образом:

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

    • Простейший сценарий: введите : ef b b .

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

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

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

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

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

84
ответ дан 24 November 2019 в 10:02
поделиться

В дополнение к ответам 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 - = для отображения проводника буфера.

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

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

1
ответ дан 24 November 2019 в 10:02
поделиться

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

Попробуйте!

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

1
ответ дан 24 November 2019 в 10:02
поделиться

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

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

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

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

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

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

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

5
ответ дан 24 November 2019 в 10:02
поделиться

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

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("") 

Мне нравится, что в нем есть поддержка подстановочных знаков (*). Это также хорошо подходит для нескольких матчей.

1
ответ дан 24 November 2019 в 10:02
поделиться

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

  • оригинальный плагин нечеткого поиска - который 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
6
ответ дан 24 November 2019 в 10:02
поделиться

Мой рабочий процесс для поиска файлов - 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. Вы также можете через них. Используйте return, чтобы открыть:)

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

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

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

0
ответ дан 24 November 2019 в 10:02
поделиться

Вот кое-что довольно тривиальное, что я вставляю в свой .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 (т.е. это обычный плагин).

0
ответ дан 24 November 2019 в 10:02
поделиться

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

Вы знаете о вкладках Vim? Не уверен, что вы имели в виду вкладки Vim или тосковали по вкладкам TextMate. Неясно, какую версию Vim вы используете, но в ней есть вкладки, начиная с версии 7.0 (которая, кажется, устанавливается везде, где я смотрю в последнее время), и они потрясающие.

: tabe открывает новую (сокращенно от "редактирование вкладки", например : tabe для пустого или : tabe path / to / file для открытия файла на новой вкладке), вы можете перемещаться между соседними вкладками с помощью ] gt / gT , а также множество других навигационных команд, связанных с вкладками, как и следовало ожидать от Vim (: вкладки справки )

Мой рабочий процесс для большие проекты, как правило, включают в себя множество вкладок, в каждом от 1 до 3 окон в зависимости от того, какой контекст мне нужен. Это работает даже лучше, если у меня окно терминала двойной ширины, поскольку я могу разделить его по вертикали с помощью : vs , поэтому на одной вкладке можно легко показать мне 4 файла одновременно с большим количеством места для каждого.

Окончательный Совет: я иногда использую команду «переключить буфер» (: sb ), которая в некотором роде похожа на нечеткое обнаружение TM, поскольку она работает довольно хорошо, но только для уже открытых буферов. По-прежнему отлично подходит, когда у меня одновременно открыто несколько или более файлов. (NB, мне нужно было : установить switchbuf = usetab в моем vimrc, чтобы это работало во всех вкладках, но как только это будет установлено, все будет отлично.)

так что тогда одна вкладка может легко показать мне 4 файла одновременно с большим количеством места для каждого.

Последний совет: я иногда использую команду «переключить буфер» (: sb ), которая является что-то вроде нечеткого вывода TM в том смысле, что он работает довольно хорошо, но только для уже открытых буферов. По-прежнему отлично подходит, когда у меня одновременно открыто несколько или более файлов. (NB, мне нужно было : установить switchbuf = usetab в моем vimrc, чтобы это работало во всех вкладках, но как только это будет установлено, все будет отлично.)

так что тогда одна вкладка может легко показать мне 4 файла одновременно с большим количеством места для каждого.

Последний совет: я иногда использую команду «переключить буфер» (: sb ), которая является что-то вроде нечеткого вывода TM в том смысле, что он работает довольно хорошо, но только для уже открытых буферов. По-прежнему отлично подходит, когда у меня одновременно открыто несколько или более файлов. (NB, мне нужно было : установить switchbuf = usetab в моем vimrc, чтобы это работало во всех вкладках, но как только это будет установлено, все будет отлично.)

По-прежнему отлично подходит, когда у меня одновременно открыто несколько или более файлов. (NB, мне нужно было : установить switchbuf = usetab в моем vimrc, чтобы это работало во всех вкладках, но как только это будет установлено, все будет отлично.)

По-прежнему отлично подходит, когда у меня одновременно открыто несколько или более файлов. (NB, мне нужно было : установить switchbuf = usetab в моем vimrc, чтобы это работало во всех вкладках, но как только это будет установлено, все будет отлично.)

4
ответ дан 24 November 2019 в 10:02
поделиться

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

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

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

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

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

2
ответ дан 24 November 2019 в 10:02
поделиться

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

:Sex

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

238
ответ дан 24 November 2019 в 10:02
поделиться