Сохранение изменений в буфер Vim без переключения на этот буфер

#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. Это все равно переключается на каждый буфер, а также не сохраняет исходный буфер.