Pembaruan terbaru tentang pengalaman saya
Bagian 0"+y$dd dalam pemetaan berikut ini adalah sesuatu yang harus Anda pikirkan dan sesuaikan dengan selera / alur kerja / pengalaman Anda.
Sebagai contoh, sangat sering saya menemukan diri saya berakhir dengan beberapa baris di buffer, di mana saya hanya ingin mengeksekusi satu kursor aktif; dalam hal ini saya dapat menggunakan 0"+y$dd:%d<CR>sebagai gantinya0"+y$dd .
Dan ini hanyalah salah satu skenario yang mungkin.
Jawaban akhir untuk mereka yang suka vim
- Tetapkan
vimsebagai EDITOR/ Anda VISUAL, sehingga saat mengedit baris perintah, Anda akan menggunakanvim untuk mengeditnya.
- Masukkan file
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>Anda ~/.vimrcke peta Leaderd(yang jarang Anda gunakan saat mengedit perintah) untuk tindakan "hapus baris saat ini ke dalam+ register tanpa EOL tertinggal".
- Setelah selesai mengedit perintah di
vimeditor, tekan EscapeLeaderd.
- Rekatkan clipboard ke terminal (ini tergantung terminal).
Jawaban asli
Saya sering perlu melakukan hal yang sama, dan saya melakukannya sebagai berikut. (Saya biasanya menggunakan set -o viin bash, jadi poin 1 dan 2 berikut ini berbeda jika Anda menggunakan set -o emacs, default; berdasarkan pertanyaan Anda sepertinya poin 1 dan 2 disatukan dalam Ctrl+ xdiikuti oleh Ctrl+ e, yang lebih sulit untuk mengetik, ya .)
- tekan Escapeberada dalam mode normal,
- memukul v untuk masuk ke editor untuk mengedit perintah,
- edit perintah yang saya suka,
(Di sinilah Anda mengajukan pertanyaan.)
- memukul Escape0"+y$dd:wq,
- Catatan:, 0"+y$tidak hanya "+yy, karena yang terakhir akan menyalin baris baru juga, dan ini akan menghasilkan mengeksekusi perintah setelah menempelkannya di baris perintah,
- rekatkan clipboard pada baris perintah
- bagaimana melakukan ini tergantung pada terminal yang Anda gunakan, saya kira; Saya menekan Ctrl+ Alt+ vdalam
URxvt.
- lanjutkan ke persetujuan / edit manual.
Jelas ini hanya solusi, yang terdiri dari menyalin perintah yang diedit ke clipboard sebelum menghapus seluruh perintah, sehingga tidak ada yang dieksekusi saat keluar dari editor; namun itu yang terbaik yang bisa saya dapatkan untuk diri saya sendiri.
Memperbarui
Karena saya EDITOR(dan VISUAL) sama dengan vim, ketika saya mengedit perintah, saya mengeditnyavim .
Dalam hal ini, saya perhatikan bahwa buffer bernama /tmp/bash-fc.random, di mana randomstring acak alfanumerik 6 karakter.
Ini memberi ruang bagi banyak kemungkinan, jika Anda gunakan vimsebagai editor, karena Anda dapat menentukan beberapa pemetaan di Anda .vimrcuntuk menjalankan seluruh urutan Escape0"+y$dd:wq. Misalnya, satu perintah yang jarang Anda gunakan saat mengedit baris perintah adalah Leaderd; karena itu Anda dapat meletakkan mapping berikut di .vimrcfile Anda
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
sehingga langkah 4 dalam resep di atas menjadi
- memukul EscapeLeaderd
edit-and-execute-command.