скачать - Как эффективно работать с несколькими файлами в Vim?




редактор vim (18)

Я начал использовать Vim для разработки Perl-скриптов, и я начал находить его очень мощным.

Одна вещь, которая мне нравится, - это открыть несколько файлов одновременно, например, vi main.pl maintenance.pl а затем vi main.pl maintenance.pl между ними:

:n
:prev

и посмотрите, какой файл открыт с

:args

И чтобы добавить файл, могу сказать:

:n test.pl

который, я ожидаю, будет добавлен к моему списку файлов, но вместо этого он уничтожит мой текущий список файлов, а когда я test.pl :args меня есть только test.pl open.

Итак, как я могу добавлять и удалять файлы в список моих аргументов?


список

Чтобы просмотреть список текущих буферов, я использую:

:ls

открытие

Чтобы открыть новый файл, я использую

:e ../myFile.pl

с улучшенным завершением вкладки ( set wildmenu в ваш .vimrc ).

Примечание: вы также можете использовать :find который будет искать набор путей для вас, но сначала вам нужно настроить эти пути.

Переключение

Чтобы переключаться между всеми открытыми файлами, я использую

:b myfile

с улучшенным заполнением вкладки (все еще set wildmenu ).

Примечание:: :b# выбирает последний посетивший файл, поэтому вы можете использовать его для быстрого переключения между двумя файлами.

Использование окон

Ctrl-W s и Ctrl-W v чтобы разделить текущее окно по горизонтали и по вертикали. Вы также можете использовать :split и :vertical split ( :sp и :vs )

Ctrl-W w для переключения между открытыми окнами и Ctrl-W h (или j или k или l ) для перемещения по открытым окнам.

Ctrl-W c чтобы закрыть текущее окно, и Ctrl-W o чтобы закрыть все окна, кроме текущего.

Запуск vim с флагом -o или -O открывает каждый файл в своем собственном расколе.

При всем этом мне не нужны вкладки в Виме, и мои пальцы находят мои буферы, а не мои глаза.

Примечание. Если вы хотите, чтобы все файлы переходили в один экземпляр Vim, запустите Vim с параметром --remote-silent .


Vim (но не оригинальный Vi!) Имеет вкладки, которые я нахожу (во многих контекстах) выше буферов. Вы можете сказать :tabe [filename] чтобы открыть файл на новой вкладке. Переключение между вкладками осуществляется щелчком по вкладке или комбинациями клавиш [ n ] gt и gT . Графический Vim даже имеет графические вкладки.


Вы можете быть абсолютным сумасшедшим и псевдоним vim vim -p , добавив в свой .bashrc :

alias vim="vim -p"

Это приведет к открытию нескольких файлов из оболочки в закладках, без необходимости вызывать :tab ball изнутри vim впоследствии.


Вы можете использовать глобальные оценки Vim .

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

Когда вы меняете места, сброс меток также очень быстрый: mC отмечает новое кодовое пятно, mT отмечает новое тестовое место.


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

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Он отлично сочетает в себе команды :ls и :b - перечисление всех открытых буферов и ожидание ввода команды для переключения буфера.

Учитывая приведенное выше отображение в vimrc, как только вы наберете <Leader>f ,

  • Отображаются все открытые буферы
  • Вы можете:
    • Тип 23 переходит в буфер 23,
    • Введите # чтобы перейти в альтернативный буфер / MRU,
    • Введите частичное имя файла, затем введите <Tab> или <Ci> для автозаполнения,
    • Или просто <CR> или <Esc> чтобы оставаться в текущем буфере

Снимок вывода для приведенного выше сопоставления клавиш:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

В приведенном выше снимке:

  • Второй столбец: %a для текущего, h для скрытых, # для предыдущего, пустой для не был переключен.
  • Третий столбец: + для модифицированных.

Кроме того, я настоятельно рекомендую set hidden . См . :help 'hidden' .


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


Когда я начал использовать VIM, я не понимал, что вкладки должны использоваться как разные макеты окон, а буфер служит ролью для множественного редактирования / переключения файлов между собой. На самом деле в начале вкладки даже не были до версии v7.0, и я только что открыл один VIM внутри вкладки терминала (я использовал гном-терминал в данный момент) и переключался между вкладками, используя alt + numbers, так как я думал, используя команды вроде : buffers,: bn и: bp были слишком много для меня. Когда был выпущен VIM 7.0, мне было проще управлять большим количеством файлов и переключаться на него, но в последнее время я просто понял, что буферы всегда должны быть в пути, если только одно: вам нужно настроить его, чтобы он работал правильно.

Поэтому я попробовал vim-авиакомпанию и включил визуальный верхний табуляторный буферный бар, но у графика возникла проблема с моим iTerm2, поэтому я попробовал пару других, и кажется, что MBE работает лучше всего для меня. Я также устанавливаю shift + h / l как ярлыки, так как исходные (перемещение к голове / хвосту текущей страницы) для меня не очень полезны.

map <Sh> :bprev<Return>
map <Sl> :bnext<Return>

Кажется, это еще проще, чем gt и gT, и: e проще, чем: tabnew. Я нахожу: bd не так удобен, как: q хотя (у MBE есть некоторые проблемы с ним), но я могу жить со всеми файлами в буфере, которые я думаю.


Мой способ эффективно работать с несколькими файлами - использовать tmux.

Он позволяет разбивать окна по вертикали и по горизонтали, например:

Я работаю таким образом на обеих машинах mac и linux, и я нахожу его лучше, чем собственный механизм переключения окон, который предоставляется (на компьютерах Mac). Я считаю, что переход проще и только с tmux я смог получить «новую страницу в том же текущем каталоге», работающую на моем mac (несмотря на то, что, кажется, есть варианты для открытия новых панелей в том же каталоге), который удивительно критическая часть. Новейшее новое место в текущем месте удивительно полезно. Метод, который делает новые панели с теми же ключевыми комбо для обеих ОС, имеет для меня решающее значение и бонус для всех для будущей личной совместимости. Помимо нескольких панелей tmux, я также пытался использовать несколько вкладок, например и несколько новых окон, например и в конечном итоге я обнаружил, что несколько tmux-панелей будут самыми полезными для меня. Я очень «визуальный» и люблю держать свои различные контексты прямо передо мной, соединенными вместе как панели.

tmux также поддерживает горизонтальные и вертикальные панели, которые на более старшем screen не были (хотя mac itm2, похоже, поддерживает его, но опять же, текущая настройка каталога не работала для меня). tmux 1.8


Почему бы не использовать вкладки (введенные в Vim 7)? Вы можете переключаться между вкладками с помощью :tabn и :tabp , With :tabe <filepath> вы можете добавить новую вкладку; и с регулярным :q или :wq вы закрываете вкладку. Если вы :tabn и :tabp на свои клавиши F7 / F8, вы можете легко переключаться между файлами.

Если файлов не так много или у вас нет Vim 7, вы также можете разделить экран на несколько файлов :sp <filepath> . Затем вы можете переключаться между splitscreens с помощью Ctrl + W и затем стрелкой в ​​направлении, которое вы хотите переместить (или вместо клавиш со стрелками, w для следующего и W для предыдущего экрана splitscreen)


При использовании нескольких файлов в vim я использую эти команды в основном (с открытыми ~ 350 файлами):

  • :b <partial filename><tab> (переход в буфер)
  • :bw ( :bw буфера, удаление буфера)
  • :e <file path> (отредактировать, открыть новый буфер>
  • pltags - разрешить pltags на подпрограммы / определения методов

Чтобы добавить в список args :

:argadd

Чтобы удалить из списка args :

:argdelete

В вашем примере вы можете использовать :argedit test.pl, чтобы добавить test.pl в список args и отредактировать файл за один шаг.

:help args дает гораздо более подробную информацию и расширенное использование


Я бы предложил использовать плагин

NERDtree

Вот ссылка github с инструкциями.

Nerdtree

Я использую vim-plug как менеджер плагинов, но вы также можете использовать Vundle.

vim-plug

Vundle


Я использую командную строку и git много, поэтому у меня есть этот псевдоним в моем bashrc:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Это откроет каждый новый файл на новой вкладке в существующем окне и создаст одно окно для каждого репозитория git. Итак, если вы откроете два файла из репо A и 3 файла из репо B, вы получите два окна: один для репо A с двумя вкладками и один для репо B с тремя вкладками.

Если файл, который вы открываете, не содержится в репозитории git, он перейдет в окно по умолчанию.

Для перехода между вкладками я использую эти сопоставления:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Чтобы открыть сразу несколько файлов, вы должны объединить это с одним из других решений.


Я использую команды буфера - :bn (следующий буфер) :bp (предыдущий буфер) :buffers (список открытых буферов) :b<n> (открыть буфер n) :bd (удалить буфер). :e <filename> просто откроется в новом буфере.


Я использую следующее: это дает вам множество функций, которые вы ожидаете иметь в других редакторах, таких как Sublime Text / Textmate

  1. Использовать буферы не «вкладки». Буферы - это та же концепция, что и вкладки практически во всех других редакторах.
  2. Если вам нужен тот же самый вид наличия вкладок, вы можете использовать плагин vim-airline со следующей настройкой в ​​вашем .vimrc : let g:airline#extensions#tabline#enabled = 1 . Это автоматически отображает все буферы в виде заголовков табуляции, когда у вас нет открываемых страниц
  3. Используйте vim-unimpaired Tim Pope, который дает [ b и ] b для перехода к предыдущим / следующим буферам соответственно (плюс целый ряд других лакомств)
  4. set wildmenu в вашем .vimrc затем, когда вы set wildmenu :b <file part> + Tab для буфера, вы получите список возможных буферов, которые вы можете использовать стрелки влево / вправо для прокрутки
  5. Используйте плагин vim-obsession от Tim Pope, чтобы хранить сеансы, которые хорошо сочетаются с авиакомпанией (у меня было много боли с сеансами и плагинами )
  6. Используйте плагин vim-vinegar Тима Папа. Это работает с носителем :Explore но облегчает работу с ним. Вы просто набираете - открыть проводник, который является тем же самым ключом, что и в директории в проводнике. Делает навигацию быстрее (однако с fzf я редко использую это)
  7. fzf (который может быть установлен как vim-плагин) также является действительно мощным нечетким поиском, который вы можете использовать для поиска файлов (и буферов тоже). fzf также очень хорошо играет с fd (более быстрая версия поиска)
  8. Используйте Ripgrep с vim-ripgrep для поиска по базе кода, а затем вы можете использовать :cdo по результатам поиска и замены

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

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Это перекрывает существующие сопоставления для H и L, но делает переключение между файлами чрезвычайно быстрым и легким. Просто нажмите «H» для следующего и «L» для предыдущего; используете ли вы вкладки или буферы, вы получите ожидаемые результаты.


если вы используете osx и хотите, чтобы вы могли нажимать на ваши вкладки, используйте MouseTerm и SIMBL (взяты here ). Кроме того, ознакомьтесь с этим обсуждением .


попробуйте следующие карты для удобства редактирования нескольких файлов

"разделенные окна

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

" передвигаться

nmap <Cj> <Cw>j

nmap <Ck> <Cw>k

nmap <Cl> <Cw>l

nmap <Ch> <Cw>h





vi