Bagaimana cara menghapus kolom kedua di Vim?

12

Saya memiliki file yang dibatasi tab seperti:

name1   verb1   name2   verb2   etc...

Saya ingin menghapus kolom kedua. Saya mencoba mengedit salah satu dari jawaban ini , tetapi karena tidak terbiasa seddan awk, saya tidak bisa.

Ada yang bisa bantu saya?

teaLeef
sumber
@KasiyA asli OP digunakan \ t untuk menunjukkan tab.
steeldriver
@steeldriver Ok Anda benar. Saya pikir itu bagian dari garis. dihapus. Tapi saya diedit untuk memperbaikinya sesuai dengan posting pertama. Terima kasih
αғsнιη
1
vim visual-block mode tidak menyelesaikan masalah? (ctrl-v dalam mode normal, pilih kolom, xuntuk dihapus)?
Rmano
@Rmano ini membantu terima kasih, tetapi bisakah Anda memberi tahu saya cara menuju ke akhir file dalam mode visual? (Saya mencoba ctrl G, tetapi tidak berhasil).
teaLeef

Jawaban:

10

Dalam vim, Anda harus dapat menggunakan perintah

:%s/\t[^\t]*//

(pengganti TABdiikuti dengan nol atau lebih kemunculan karakter apa pun kecuali TABdengan tidak ada). Jika file Anda hanya memiliki dua kolom Anda bisa menggunakan sedikit lebih sederhana :%s/\t.*atau :%s/\t.*$yang menggantikan pertama TABdan setiap karakter berikut hingga akhir baris.

Steeldriver
sumber
22

Jawaban yang diterima jauh lebih elegan daripada ini (saya membaliknya!) Tetapi jika Anda tidak mengingatnya, Anda dapat menggunakan vim mode blok visual secara langsung. Buka vim dan buka (mode normal) ke sudut pertama kolom, seperti ini:

masukkan deskripsi gambar di sini

Ketik CTRL-Vdan Anda dapat memindahkan kursor untuk memilih kolom, ini tengah:

masukkan deskripsi gambar di sini

Untuk pergi di akhir, tekan G :

masukkan deskripsi gambar di sini

blok tampaknya rusak karena kita berada di baris terakhir yang kosong; cukup naik satu baris (dengan panah ke atas atauk ) untuk melihatnya lagi ...:

masukkan deskripsi gambar di sini

Sekarang Anda cukup tekan xuntuk menghapus blokir:

masukkan deskripsi gambar di sini

Rmano
sumber
6

Saya akan gunakan cutuntuk ini

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

Anda dapat menggunakan ini sebagai filter dalam vim, juga (ini akan menggantikan semua baris dalam file; Anda juga dapat menggunakan (misalnya) 2,9alih-alih %memproses baris 2-9, atau memilih baris yang Anda inginkan dengan V):

:%!cut -f1,3-

-f1,3-berarti 'bidang cetak satu, diikuti oleh bidang ketiga dan semua bidang hingga akhir baris'. Secara default, cutgunakan tab sebagai pembatasnya; jika Anda membutuhkan sesuatu yang lain, gunakan -dopsi (lihat man cut).

Evilsoup
sumber
4

Anda dapat mencoba:

:%norm WdW

atau secara manual menggunakan mode visual:

  1. Lompat ke kolom kedua (misalnya dengan menekan:) W.
  2. Mulai blok visual dengan Ctrl+v.
  3. Pilih kolom kedua (mis. Dengan menekan: W ,G ).
  4. Hapus dengan menekan d.

Untuk melakukannya di tempat dari baris perintah, coba:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

Terkait: Bagaimana menulis literal untuk tombol Tab untuk digunakan untuk gerak?

Lihat juga:

kenorb
sumber
Ya, +1, tetapi berhati-hatilah bahwa jika Anda memiliki garis kosong di akhir langkah 3) dapat salah ...
Rmano