Menampilkan riwayat perintah dengan showcmd

11

Saat menggunakan set showcmdVim menunjukkan perintah parsial di baris terakhir layar. Misalnya, dalam mode Normal ketika mengetik perintah dt., baris terakhir ditampilkan dtdan kemudian, ketika Anda menekan .perintah selesai dan karena itu tidak ada yang ditampilkan.

Apakah ada cara untuk menunjukkan perintah penuh? Misalnya saat mengetik dt.gU(, pertama dt.akan ditampilkan; dan ketika mulai mengetik perintah kedua yang pertama akan dihapus, sehingga pada akhirnya hanya gU(akan ditampilkan.

Ini bisa bermanfaat misalnya dalam menggambarkan GIF; dan untuk memeriksa apakah Anda mengetik apa yang Anda inginkan jika Anda menghadapi beberapa hasil yang tidak terduga.

Gonçalo Ribeiro
sumber
1
Apa itu perintah penuh? Ini dtditampilkan karena operator saat ini sedang menunggu keputusan. Setelah diberi gerakan, itu bukan lagi operator yang tertunda. Misalkan kita melangkah lebih jauh, dan melakukan dt.gU(gu)dawatau lebih. Apakah semua itu "satu perintah penuh", atau apakah itu empat perintah penuh, atau yang lain?
davidlowryduda
@mixedmath bagi saya yang akan dihitung sebagai 4 perintah. Paragraf kedua dari jawaban itu mencoba untuk mengacaukan apa yang saya maksud.
Gonçalo Ribeiro
2
Dari perspektif Vim, dt.gU(ada 2 perintah: dt. dan gU(.... Jadi yang Anda inginkan adalah menunjukkan semacam sejarah perintah (Vim sudah menunjukkan "comamnds penuh").
Martin Tournoij
@Carpetsmoker, ya, itu mungkin yang saya inginkan. Terima kasih telah mengedit judul pertanyaan.
Gonçalo Ribeiro
3
Saya telah mencari-cari dalam kode sumber Vim bekerja pada sejarah normal . Dalam src/normal.cpanggilan kode clear_showcmd()di beberapa tempat ( normal_cmd(), do_pending_operator(), end_visual_mode()). Saya bermain dengan membuang ke file showcmd_bufpada titik-titik itu, yang terlihat cukup bagus, tetapi membuat saya cukup yakin bahwa Anda tidak bisa mendapatkan apa yang Anda inginkan tanpa memodifikasi kode sumber Vim dan membangunnya kembali. Tentu saja, melakukan hal itu mungkin sepadan dengan kerumitan untuk membuat gif Anda.
John O'M.

Jawaban:

9

Saya tidak dapat menemukan cara untuk melakukan ini dalam Vim biasa. Namun, jika Anda bersedia untuk menambal Vim, yang berikut ini mungkin cocok untuk Anda.

Patch yang sangat sederhana (diterapkan pada Vim-7.4.052) menonaktifkan pembaruan aktual ke layar yang menghapus sejarah di akhir perintah normal. Ini dilakukan dengan mengembalikan apakah showcmd_is_cleardisetel sebelum memperbarui tampilan atau tidak . (Atau, Anda dapat mengomentari pernyataan if dan hanya meninggalkan satu returnbaris asli . catatan : Tambalan di bawah tidak menempel dengan baik; Anda mungkin harus menerapkan ini dengan tangan, meskipun itu hanya satu kalimat pendek. catatan : Saya tidak mengomentari yang sebenarnya display_showcmd()karena tampaknya akan digunakan dalam mode visual untuk memperbarui tampilan jumlah baris yang dipilih atau hal-hal lain yang mungkin lainnya. Saya belum banyak menguji ini.

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Hasilnya terlihat seperti ini:

Screencast menunjukkan tambalan

Beberapa hal menarik untuk diperhatikan:

  • Hal ini menunjukkan bahkan gerakan sederhana, seperti j, k, b, dll
  • The xperintah benar-benar menjadi dldi showcmd_buf tersebut.
  • Perintah yang mengubah garis bawah menghapus area showcmd (misalnya, menggunakan :perintah, atau memasuki mode penyisipan (setidaknya dalam pengaturan saya))
  • Program penangkapan berhenti merekam banyak goresan setelah saya mengetikkan ", tetapi urutan kunci saya terlihat di jendela vim untuk register panjang saya yang sudah ditentukan.
  • Tidak ditampilkan di gips, tetapi memukul escdalam mode normal menunjukkan ^[di area showcmd
John O'M.
sumber
4

Selain dari solusi John , ada cara lain untuk menampilkan semua penekanan tombol vim yang ditekan dengan menggunakan -wparameter yang merekam semua karakter yang Anda ketikkan dalam file. Masalahnya adalah, vim itu menulis penekanan tombol hanya ketika Anda keluar dari Vim. Beginilah cara kerja VimGolf .

Untuk mengatasinya, Kana Natsuno datang dengan tambalan satu baris ini , yang menonaktifkan buffering -wopsi, sehingga Anda memiliki akses ke aliran penekanan tombol waktu nyata. Maka itu masalah membacanya (misalnya tail -f), parsing atau Anda dapat mencoba menampilkannya di bilah status ( :set statusline).

Lihat pembuatan kustom Vim menggunakan cabang live-stream-keystrokes Drew , untuk mendapatkan aliran penekanan tombol real-time.

Sumber: Vimprint - parser Vim keystroke di blog Drew Neil

Ini berguna jika Anda ingin mengungkapkan penekanan tombol yang ditekan Vim dalam tutorial video atau GIF.

kenorb
sumber