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

Что случилось с вами, так это то, что когда программа C была скомпилирована на ассемблере, ваша функция toUpper закончилась так:

_toUpper:
LFB4:
        pushq   %rbp
LCFI3:
        movq    %rsp, %rbp
LCFI4:
        movb    %dil, -4(%rbp)
        cmpb    $96, -4(%rbp)
        jle     L8
        cmpb    $122, -4(%rbp)
        jg      L8
        movzbl  -4(%rbp), %eax
        subl    $32, %eax
        movb    %al, -4(%rbp)
L8:
        leave
        ret

Вычитание 32 было выполнено в% eax регистр. И в соглашении на вызов x86, это регистр, в котором ожидается возвращаемое значение! Итак ... вам повезло.

Но, пожалуйста, обратите внимание на предупреждения. Они там по какой-то причине!

1058
задан ib. 1 August 2011 в 03:23
поделиться

11 ответов

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

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

1126
ответ дан Shahbaz 1 August 2011 в 03:23
поделиться

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

  • :b <partial filename><tab> (переход к буферу)
  • :bw (буферная очистка, удалите буфер)
  • :e <file path> (редактирование, откройтесь, новый буфер>
  • pltags - позволяют перейти к определениям подпрограммы/метода
18
ответ дан Arslan Ali 1 August 2011 в 03:23
поделиться

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

34
ответ дан Konrad Rudolph 1 August 2011 в 03:23
поделиться

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

47
ответ дан Andy Whitfield 1 August 2011 в 03:23
поделиться

Добавить к эти args список:

:argadd

Для удаления из эти args список:

:argdelete

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

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

107
ответ дан Dan Lowe 1 August 2011 в 03:23
поделиться

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

10
ответ дан indentation 1 August 2011 в 03:23
поделиться

Я использую тот же .vimrc файл для GVim и энергии командной строки. Я склонен использовать вкладки в GVim и буферы в энергии командной строки, таким образом, у меня есть свой .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(' 

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

) != 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('

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

) != '1' " Tab support && tabs open normal gT else " No tab support, or no tabs open execute ":bprev" endif endfunction

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

12
ответ дан Max Cantor 1 August 2011 в 03:23
поделиться

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

Попытка, делающая :ls для наблюдения список файлов, которые Вы имеете открытый и Вы будете видеть:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

можно тогда возвратиться через файлы путем обращения к ним числами, перечисленными, например:3b

, или можно разделить экран путем введения номера, но использования сурьмы вместо просто b.

Как в стороне % относится к в настоящее время видимому файлу, и # относится к альтернативному файлу.

можно легко переключиться между этими двумя файлами путем нажатия Ctrl Редактирование 6

Сдвига: как :ls можно использовать :reg для наблюдения текущего содержания регистров включая 0-9 регистров, которые содержат то, что Вы удалили. Это особенно полезно, если Вы хотите снова использовать некоторый текст, который Вы ранее удалили.

39
ответ дан Arslan Ali 1 August 2011 в 03:23
поделиться
:ls

для списка открытых буферов

  • :bp предыдущий буфер
  • :bn следующий буфер
  • :bn (n число) перемещаются в буфер n'th
  • :b <filename-part> с автозавершением обеспечения клавиши Tab (потрясающий!!)

В некоторых версиях энергии, bn и bp на самом деле bnext и bprevious соответственно. Автоматическое заполнение вкладки полезно в этом случае.

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

Плюс, можно сохранить сессии энергии

:mksession! ~/today.ses

, вышеупомянутая команда сохраняет текущие открытые буферы файлов и настройки к [1 113]. Можно загрузить ту сессию при помощи [1 122]

vim -S ~/today.ses

Никакая стычка, помнящая, где Вы вчера кончили.;)

224
ответ дан user664833 1 August 2011 в 03:23
поделиться

Список

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

:ls
<час>

Открытие

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

:e ../myFile.pl

с расширенным заполнением клавишей Tab (поместите set wildmenu в Ваш .vimrc).

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

<час>

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

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

:b myfile

с расширенным заполнением клавишей Tab (все еще 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 для закрытия всех окон кроме текущего.

Стартовая энергия с -o или -O флаг открывает каждый файл в своем собственном разделении.

<час>

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

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

535
ответ дан pjz 1 August 2011 в 03:23
поделиться

Я использую несколько буферов, которые установлены скрытые в моем ~/.vimrc файл.

мини-буферный сценарий проводника хорош также получить хороший компактный список Ваших буферов. Тогда :b1 или :b2..., чтобы перейти к соответствующему буферу или использовать мини-буферный проводник и вкладку через буферы.

3
ответ дан Arslan Ali 1 August 2011 в 03:23
поделиться