Làm thế nào để xóa cột thứ hai trong Vim?


12

Tôi có một tệp được phân định bằng tab như:

name1   verb1   name2   verb2   etc...

Tôi muốn xóa cột thứ hai. Tôi đã thử chỉnh sửa một trong những câu trả lời này , nhưng không quen thuộc sedawk, tôi không thể.

Ai giúp tôi với?


@KasiyA Bản gốc của OP được sử dụng \ t để chỉ các tab.
Steeldo

@steel ấn Ok bạn nói đúng. Tôi nghĩ đó là một phần của dòng. loại bỏ. Nhưng tôi chỉnh sửa để đúng theo bài viết đầu tiên .thanks
αғsнιη

1
Chế độ chặn hình ảnh vim không giải quyết được vấn đề? (ctrl-v ở chế độ bình thường, chọn cột, xđể xóa)?
Rmano

@Rmano nó giúp cảm ơn, nhưng bạn có thể cho tôi biết làm thế nào để đi đến cuối tập tin ở chế độ trực quan? (Tôi đã thử ctrl G, nhưng nó không hoạt động).
teaLeef

Câu trả lời:


10

Trong vim, bạn sẽ có thể sử dụng lệnh

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

(thay thế TABtheo sau bằng 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào trừ TABkhi không có gì). Nếu tệp của bạn chỉ có hai cột, bạn có thể sử dụng đơn giản hơn một chút :%s/\t.*hoặc :%s/\t.*$thay thế các ký tự đầu tiên TABbất kỳ ký tự nào sau cho đến cuối dòng.


22

Câu trả lời được chấp nhận thanh lịch hơn nhiều so với câu trả lời này (tôi đã nâng cấp nó!) Nhưng nếu bạn không nhớ nó, bạn có thể sử dụng vim chế độ khối trực quan. Mở vim và đi (chế độ bình thường) đến góc đầu tiên của cột, như thế này:

nhập mô tả hình ảnh ở đây

Nhập CTRL-Vvà bạn có thể di chuyển con trỏ để chọn cột, đây là giữa chừng:

nhập mô tả hình ảnh ở đây

Để đi đến cuối, nhấn G:

nhập mô tả hình ảnh ở đây

khối dường như bị hỏng vì chúng tôi đang ở dòng cuối cùng trống; chỉ cần đi lên một dòng (với mũi tên lên hoặc k) để xem lại ...:

nhập mô tả hình ảnh ở đây

Bây giờ bạn chỉ cần nhấn xđể xóa khối:

nhập mô tả hình ảnh ở đây


6

Tôi sẽ sử dụng cutcho việc này

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

Bạn cũng có thể sử dụng bộ lọc này làm bộ lọc trong vim (điều này sẽ thay thế tất cả các dòng trong tệp; bạn cũng có thể sử dụng (ví dụ) 2,9thay vì %xử lý các dòng 2-9 hoặc chọn các dòng bạn muốn V):

:%!cut -f1,3-

-f1,3-có nghĩa là 'trường in một, theo sau là trường ba và tất cả các trường cho đến hết hàng'. Theo mặc định, cutsử dụng một tab làm dấu phân cách của nó; nếu bạn cần một cái gì đó khác, sử dụng -dtùy chọn (xem man cut).


4

Bạn có thể thử một trong hai:

:%norm WdW

hoặc bằng tay sử dụng chế độ trực quan:

  1. Nhảy vào cột thứ hai (ví dụ bằng cách nhấn W:).
  2. Bắt đầu chặn hình ảnh bằng cách Ctrl+v.
  3. Chọn cột thứ hai (ví dụ: bằng cách nhấn : W, G).
  4. Xóa nó bằng cách nhấn d.

Để thực hiện tại chỗ từ dòng lệnh, hãy thử:

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

Liên quan: Làm thế nào để viết chữ cho phím Tab để sử dụng cho chuyển động?

Xem thêm:


Có, +1, nhưng hãy cẩn thận nếu bạn có các dòng trống ở cuối bước 3) có thể bị sai lệch ...
Rmano
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.