Bagaimana saya bisa menjalankan fungsi atau makro di folder file?

12

Katakanlah saya memiliki fungsi, namanya StripWhitespace.

Saya dapat menjalankannya pada satu file dengan membuka file dan menjalankannya :StripWhitespace.

Bagaimana saya bisa menjalankan fungsi itu secara otomatis terhadap folder file, dan menyimpan hasilnya saat saya melanjutkan?

kodok persegi
sumber
3
Tolong detailnya!
200_sukses

Jawaban:

10

Anda bisa menggunakan -cargumen untuk menjalankan perintah saat startup, dari vim(1):

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

Contoh:

vim -c ':call StripWhitespace()' file1 file2

Untuk berhenti setelah itu, tambahkan | :wqa:

vim -c ':call StripWhitespace() | :wqa' file1 file2
Martin Tournoij
sumber
1
Anda ingin: argdo, jika Anda menjalankan ini untuk beberapa file pada commandline
Christian Brabandt
19

Jika Anda sudah berada di Vim, Anda dapat menggunakan perintah :argdoatau :bufdountuk mengeksekusi perintah pada setiap item dalam daftar argumen atau daftar buffer, masing-masing.

mis. untuk menjalankan :perintah pada setiap file dalam daftar argumen:

:argdo StripWhitespace

Atau untuk memanggil fungsi dari setiap file dalam daftar buffer:

:bufdo call StripWhitespace()

Atau untuk menjalankan makro qpada setiap file dalam daftar argumen:

:argdo normal @q

Anda kemudian dapat menyimpan semua buffer yang diubah dengan :wall, atau menyimpan semua dan keluar dari Vim :wqall.

Jika Anda ingin menulis file sambil berjalan, Anda dapat menambahkan panggilan :update, seperti:

:argdo s/foo/bar/ge | update

Ada berbagai cara Anda bisa mendapatkan file ke Vim di tempat pertama, termasuk:

  • Menyediakan parameter ke baris perintah vim: vim *(ini menambahkan semua file ke daftar argumen),
  • Gunakan :argsperintah (yang mendukung wildcard dan backtick expressions) untuk mengisi daftar argumen, atau :argaddperintah untuk menambahkan file ke dalamnya,
  • Hanya membuka mereka semua secara manual dengan :e, :Exatau plugin file pembukaan.
Kaya
sumber
1
Saya suka jawaban ini karena tidak perlu meninggalkan Vim, yang menurut saya terlalu mahal (daftar buffer berharga saya!). Saya punya beberapa catatan: (1) meninggalkan buffer tanpa menulis 'hidden'harus diatur; (2) : updateperintah ini sedikit perbaikan :wkarena hanya menulis jika ada perubahan, jadi :bufdo updateatau :argdo updateakan menulis semua buffer atau argumen yang dimodifikasi.
tommcdo
Poin bagus update. Saya mempertimbangkan untuk menyebutkan hiddenketika saya menulis jawabannya, tetapi memutuskan untuk tidak melakukannya karena saya tidak ingin terlalu rumit. Namun pada refleksi, itu harus ada di sana. Saya akan memperbarui jawaban untuk memasukkan kedua saran saat ini.
Kaya
@tommcdo Baru saja memeriksa dokumentasi untuk: wall, dan itu hanya menulis buffer yang berubah, jadi: bagaimanapun, pembaruan bufdo tidak diperlukan.
Kaya
Tangkapan yang baik :wall, yang juga memiliki keuntungan tidak bersepeda melalui penyangga dan menjauhkan Anda dari tempat Anda mulai. Saya kira :argdo updatemasih cerita yang berbeda - mungkin Anda tidak ingin menulis ke buffer yang tidak ada dalam daftar argumen Anda.
tommcdo
@tommcdo Poin bagus.
Kaya