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?


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

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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.