#vim
#vim
Вопрос:
Как я могу сохранить изменения в измененном буфере Vim без переключения на этот буфер? Я пытаюсь написать функцию, которая сохраняет и закрывает все буферы в проекте.
Комментарии:
1. Почему требуется избегать переключения в буфер?
2. @DonReba Это чище и быстрее — когда вы переключаетесь на буфер, он запускает автоконтроллеры и т. Д.; Также, если вы делаете это внутри функции, тогда для сохранения вашего исходного буфера требуется дополнительное кодирование, чтобы вы могли вернуться к нему в конце.
Ответ №1:
Кроме :wqall
команды, нет команды, которая записывает буфер, отличный от текущего.
Итак, вам нужно переключиться на буфер, чтобы записать его. Вы могли бы использовать :noautocmd
, чтобы избежать связанных событий (но это может иметь неблагоприятные побочные эффекты!).
Единственной альтернативой было бы использовать низкоуровневые функции, такие как getbufline()
и writefile()
, Но тогда вам придется самостоятельно разбираться с преобразованиями в кодировку, форматированием файлов и т. Д.
Ответ №2:
Вы можете использовать :wqa[ll]
для записи и закрытия всех измененных буферов. :wa
будет записывать без закрытия.
Комментарии:
1.
:x
похоже:wq
, за исключением того, что он записывает только те буферы, которые были изменены.2. Я не обязательно хочу записывать все буферы, только указанный набор (например, те, что внутри конкретного проекта). Есть ли способ?
3. @SeanMackesey, «Я пытаюсь написать функцию, которая сохраняет и закрывает все буферы в проекте».
Ответ №3:
Вы можете использовать список аргументов, см. :help argument-list
.
Предположим, вы работаете с тремя файлами foo
, bar
, baz
, и хотите только записывать foo
и baz
:
:args foo baz
:argdo w
Очевидно, вам потребуется дополнительная логика, чтобы определить, какие буферы следует поместить в список аргументов в первую очередь, но, похоже, у вас это уже есть.
Комментарии:
1. Это все равно переключается на каждый буфер, а также не сохраняет исходный буфер.