Pindah setelah akhir kata atau Hapus setelah cusor

8

Apa urutan tercepat untuk dihapus sampai akhir baris setelah posisi kursor?

Contoh:

Saya ingin menghapus baris ini dengan cara yang lebih cepat

Sequence: 5eDakan menghapus karakter kata terakhirline

Saya ingin menghapus lin ini

Bergerak berkeliling dengan vim sering menempatkan saya pada karakter pertama atau terakhir dari sebuah kata, memaksa saya untuk bergerak dengan satu penekanan tombol lagi setiap kali saya ingin menghapus ke akhir baris (dalam contoh di atas, dengan menambahkan satu gerakan ke kanan: 5elD). Apakah ada cara yang lebih efisien (dengan memindahkan setelah akhir kata atau dengan menghapus setelah kursor)?

Pierre-Jean
sumber
1
6wDmeninggalkan spasi setelah kata terakhir, tetapi setidaknya teks yang terlihat adalah yang Anda inginkan. 6wDxmenyelesaikan pekerjaan, tetapi kemudian Anda berada di empat penekanan tombol lagi.
Peter Lewerin
Terima kasih Peter atas alternatifnya, tetapi memang solusi ini membuat saya harus menekan lagi tombol untuk menyelesaikan pekerjaan. Karena skenario ini sangat umum, akan sangat bagus untuk melakukan pekerjaan ini dalam satu tindakan. Solusi Anda lebih baik daripada yang ada dalam contoh saya, di sebagian besar skenario.
Pierre-Jean
Jika Anda melakukannya seperti yang disarankan Peter dan berakhir dengan spasi kosong, ada plugin seperti DeleteTrailingWhitespace yang dapat menghilangkannya secara otomatis.
Philipp Moers

Jawaban:

4

Dadalah perintah inklusif yang bekerja di atas gerakan yang menyertakan kursor di satu ujung dan karakter yang dapat dicetak terakhir di baris di ujung lainnya. Ada AFAIK tidak ada cara bawaan untuk mengubah perintah inklusif menjadi perintah eksklusif dan sebaliknya.

Solusi terberat adalah dengan mendefinisikan operator Anda sendiri dan gerakan / objek teks.

Solusi yang agak ringan adalah mendefinisikan pemetaan untuk kasus sudut tersebut.

Solusi yang bahkan lebih ringan - tetapi membosankan - adalah menghabiskan beberapa penekanan tombol dalam mode visual.

Atau, Anda bisa bergerak dengan sedikit lebih "gesit":

5f D
romainl
sumber
1
Yah, saya agak sedih tidak ada cara yang lebih mudah, tetapi Anda menjawab pertanyaan saya. Terima kasih!
Pierre-Jean
1

Ada beberapa cara untuk mencapai apa yang Anda inginkan:

5elD
6f D
6wDx
6whD
# ... probably others too

Semua ini dikenakan biaya hanya +1 keystroke.

Jika menghapus mulai dari posisi saat ini +1 dimungkinkan, maka masuk akal juga untuk meminta penghapusan dari posisi saat ini -1. Itu akan menimbulkan pertanyaan tentang perintah lain juga, misalnya menghapus sampai akhir file dari baris saat ini +1, -1, dan seterusnya.

Bagaimana ini bisa berhasil? Saya hanya melihat dua cara yang mungkin:

  1. Berikan parameter ke perintah yang ada untuk mengubah perilaku mereka dengan nuansa yang diinginkan. Ini pasti akan dikenakan biaya +1 keystroke, sehingga Anda tidak akan lebih baik daripada yang sudah ada
  2. Dapatkan penekanan tombol baru untuk perilaku ini. Sebagian besar tombol pada keyboard sudah memiliki hal lain yang lebih penting dan kuat untuk dilakukan, itu akan menjadi pilihan yang sangat sulit untuk menetapkan salah satu tombol yang tidak digunakan untuk fungsi sekecil itu.

Jadi, saya tidak melihat cara untuk memiliki sesuatu yang lebih baik daripada fitur saat ini :-)

Saya setuju bahwa agak disayangkan bahwa tidak ada perintah "atom" untuk dihapus dari karakter berikutnya. Saya melihat penggunaan praktis dari apa yang Anda tanyakan: ketika memotong teks, saya sering ingin menghapus mulai dari karakter spasi, karena saya tidak ingin meninggalkan spasi spasi di akhir baris (Git mengeluh tentang itu, sebagai contoh). Dan perintah lompat kata wdan etidak cocok untuk ini, karena wlompat ke huruf pertama dan elompat ke huruf terakhir, dan tidak ada jalan pintas untuk melompat pada spasi setelah kata, kecuali pencarian eksplisit seperti f. Jadi saya mengerti dan bahkan membagikan kebutuhan Anda. Saya hanya tidak melihat di mana ini dapat diperas dalam fungsi yang ada.

Alternatif terbaik yang bisa saya pikirkan adalah merekam tindakan dalam makro, katakanlah d. Di akhir kata (pada huruf terakhir), rekam seperti ini:

qdlDq

Kemudian, Anda dapat mengulangi tindakan ini di akhir kata lain dengan @d. Untuk melakukannya berulang kali, Anda bisa melakukannya @@. Saat melakukannya berulang kali ini lebih cepat untuk diketik daripada lD, tetapi ini mungkin tergantung pada selera Anda. Jika Anda tidak melakukannya berulang kali maka makro tidak benar-benar membantu, karena itu adalah jumlah penekanan tombol yang sama (+ penciptaan makro).

janos
sumber
"Karena semua tombol pada keyboard sudah memiliki hal lain yang lebih penting dan kuat untuk dilakukan, opsi ini tampaknya tidak mungkin". Tidak benar; ada beberapa kunci yang tidak digunakan, dan beberapa yang bisa dibilang kurang kuat / penting yang bisa dipetakan ulang untuk memerlukan kunci pemimpin, membebaskan mereka untuk sesuatu yang benar-benar penting.
Yah, kunci yang saya gunakan ketika menguji pemetaan adalah kunci backspace, dan itu bukan pilihan yang buruk untuk operasi yang melakukan penghapusan (saat ini saya sudah mengatur untuk melakukan penghapusan garis tanpa mengubah register yang biasanya digunakan oleh tindakan seperti itu, jadi saya bisa menyalin / memotong beberapa teks, menghapus baris menggunakan backspace, lalu menempelkan teks aslinya).