Bagaimana cara menghapus konten mundur hingga “=” di baris sebelumnya?

9

Saya menggunakan contoh kode javascript:

1        var a = 1;
2        var b = |{};

Kursor berada pada posisi |(pada karakter "{" ketika bentuk kursor adalah blok), saya mengetahui bahwa saya ingin adiberi objek, jadi saya ingin memodifikasinya seperti di bawah ini:

1        var a = {};

Jadi saya ingin tahu ketika kursor ada di "{", bagaimana cara cepat menghapus semua konten sebelum "{" sampai kosong setelah tanda "=" pada baris 1?

Di editor normal lainnya, saya hanya akan menekan tombol backspace untuk menghapus kode. Tapi saya tidak bisa mencapainya dalam vim.

Aaron Shen
sumber
Anda juga dapat menekan idan menggunakan tombol backspace. Tidak ada tubuh yang akan menembak Anda untuk itu. Kupikir.
elyashiv
1
tetapi backspace tidak akan menghapus karakter dari baris di atas
Aaron Shen
3
@ AaronShen Itu tergantung pada pengaturan 'backspace' Anda. Jika termasuk eolmaka backspace akan menghapus jeda baris. Anda juga harus startdimasukkan dalam pengaturan. (Lihat :help backspace). Jangan gunakan metode ini! Ada beberapa metode yang jauh lebih cepat yang diperinci dalam jawaban di bawah ini.
Rich

Jawaban:

20

Tidak yakin apakah saya benar-benar mengerti pertanyaannya, tetapi jika Anda ingin menghapus sampai Anda punya var a = {};, Anda bisa, dari posisi kursor, gunakand?1Enter

dmembutuhkan gerakan, dan Anda dapat memberikannya pola pencarian dengan /untuk pencarian maju atau ?untuk pencarian mundur.

Berikut adalah gif kecil yang menunjukkan ini:

masukkan deskripsi gambar di sini

akshay
sumber
1
Mungkin perlu disebutkan bahwa Anda harus menekan Entersetelah mengetik d?1.
Rich
@ Rich memang terima kasih, saya telah memperbarui jawaban untuk memasukkan itu.
akshay
1
Font apa yang digunakan shell itu?
Chris Burt-Brown
@ ChrisBurt-Brown: Terminus
akshay
10

Jika Anda menggunakan vim (dan bukan vi klasik), maka dalam contoh Anda, Anda bisa melakukannya vkd(atau vkx).

  • v akan memasukkannya ke mode 'visual' (pilih)
  • k akan naik satu baris untuk meletakkan kursor pada '1', memilih bagian yang ingin Anda hapus
  • datau xakan menghapus pilihan
Bob
sumber
5

Hapus Atas

Untuk contoh khusus ini, dgkadalah salah satu cara tercepat untuk melakukannya.

The dperintah, seperti Akshay menjelaskan , dapat diikuti oleh mosi, menghapus semua karakter antara mana kursor dimulai, dan di mana gerak membawanya ke.

Dalam kode Anda, Anda ingin menghapus segala sesuatu antara posisi kursor dan kolom yang sama satu baris lebih jauh, sehingga memindahkan kursor ke atas dengan gkgerakan (yang bila digunakan dengan operator adalah non-linewise) akan mencapai tujuan Anda.

EDIT: BobH menunjukkan dalam komentar bahwa metode ini hanya berfungsi ketika 'wrap'diatur. Dengan demikian, kecuali jika Anda selalu memiliki set bungkus, Anda mungkin lebih baik menggunakan dvkatau vkd, seperti yang disarankan oleh jawaban lain di halaman ini.

Hapus Kata Mundur

Anda juga dapat menggunakan: d5batau d4B, yang masing-masing akan menghapus 5 kata atau 4 KATA mundur. ( 1;adalah satu KATA, tetapi dua kata biasa).

Kaya
sumber
mengapa dk akan menghapus baris saat ini dan di atas sepenuhnya
Aaron Shen
@AaronShen Tidak. Cobalah.
Rich
1
@ Kaya jika itu bekerja untuk Anda, maka Anda memiliki pengaturan yang memungkinkan gerakan penghapusan itu. Saya baru saja mengujinya dengan vim -u NONE -U NONEdan menghapus kedua baris.
Vitor
@Vitor Anda benar. Mencoba mencari tahu pengaturan mana yang melakukannya, sekarang.
Rich
1
BTW ternyata menggunakan gksebagai karakter yang tampaknya membutuhkan :set wrap(agak samar). Saya tidak tahu mengapa ini tampaknya bekerja untuk semua orang, tetapi tidak untuk saya, ketika bantuan untuk gkhal itu tampaknya menyiratkan itu harus bekerja. Satu-satunya petunjuk adalah bahwa makna utama gkberkaitan dengan garis yang dibungkus. Setelah saya mencoba pengaturan bungkus (seperti iseng), voila, itu berhasil.
BobH
1

Saya belum bisa berkomentar, jadi saya perlu membuat jawaban baru. Kunci yang d kdiberikan oleh Rich tidak bekerja untuk saya bahkan ketika menggunakan opsi nocompatible. Alasannya mungkin karena gerakan kdianggap secara garis lurus oleh vim, dalam hal ini kedua baris dihapus. Dari :help d:

Pengecualian untuk perintah d {motion}: Jika gerakan tidak secara berurutan, awal dan akhir gerakan tidak pada baris yang sama, dan hanya ada yang kosong sebelum memulai dan setelah akhir gerakan, penghapusan menjadi juga. Ini berarti bahwa penghapusan juga menghapus baris kosong yang mungkin Anda harapkan tetap ada. Gunakan | o_v | operator untuk memaksa gerak agar sesuai karakter

Ini juga menunjukkan obatnya: Gunakan dvkuntuk memaksa gerakan untuk menjadi karakter-bijaksana. Ini berguna bagi saya.

Saya tidak tahu o_v sebelumnya, jadi di sini :help o_v:

v

Ketika digunakan setelah operator, sebelum perintah gerakan: Memaksa operator untuk bekerja secara karakter, juga ketika gerakan secara linier. Jika gerakan itu adalah garis, itu akan menjadi | eksklusif |. Jika gerakan sudah sesuai karakter, beralih inklusif / eksklusif. Ini dapat digunakan untuk membuat gerakan eksklusif inklusif dan gerakan inklusif eksklusif

PhilippFrank
sumber
Hal yang 'tidak kompatibel' adalah herring merah lengkap. Saya kacau ketika saya menguji karena saya seorang idiot.
Rich
Kita juga bisa menggunakan dgk, di mana gk juga eksklusif dan tidak linewise.
MS.Kim