vim: ẩn n chữ cái đầu tiên của tất cả các dòng trong một tệp


12

Tôi đang phân tích tệp nhật ký bằng vim và định dạng trông như thế này

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

Vì hầu hết thời gian tôi không quan tâm đến ngày và thời gian. Tôi muốn ẩn chúng và chỉ tập trung vào các cột Tên và LogText (Để lưu một số di sản màn hình). Vì ba cột đầu tiên luôn chiếm 35 chữ cái đầu tiên trong một dòng. Có cách nào để làm cho vim không hiển thị 35 chữ cái đầu tiên của mỗi dòng không?


Tôi không biết làm thế nào bạn làm điều đó trong vim, nhưng nếu bạn không phiền khi tạo một tệp tạm thời, bạn có thể chạy cut -c36- logfile > logfile_with_first_35_chars_missingvà sau đó xem lại.
Warwick

Câu trả lời:


7

Bạn đã hỏi về cách ẩn các chữ cái đầu tiên, không xóa chúng hoặc cuộn chúng ra khỏi tầm nhìn - vì vậy đây là cách thực sự ẩn chúng:

Ẩn văn bản trong vim bằng cách sử dụng che giấu

Bạn có thể sử dụng kết hợp , kết hợp với tô sáng cú pháp và tính năng che giấu để thực sự không hiển thị các ký tự trùng khớp bên trong các dòng.

Để ẩn 25 ký tự đầu tiên của mỗi dòng:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

Thay vào đó, chỉ ẩn các dòng có dấu chấm câu:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

Để bỏ ẩn:

:syn clear Concealed
:set conceallevel=0

Những gì trông như thế này bình thường:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

sẽ trông như thế này sau khi thực hiện hai lệnh đầu tiên:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


Xem thêm - bên trong vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Hãy cho tôi biết nếu nó không hoạt động như vậy - có thể có thêm một số cài đặt mà tôi không biết hoặc vì vậy - tôi sẽ làm cho nó hoạt động.)


1
Hoạt động tốt, tôi nghĩ rằng vim cần phải được biên dịch với +concealtùy chọn (của tôi là) để làm việc này. Cũng tốt để làm set concealcursor=ncđể ngăn chặn con trỏ mở rộng.
dùng881300

Có, +concealtùy chọn tính năng là tiêu chuẩn như một số năm. Đáng buồn là bây giờ nó không được biết đến nhiều hơn. Nó thực sự tuyệt vời và linh hoạt. Cung cấp nhiều tùy chọn mới ...
Volker Siegel

8

Sử dụng chức năng lọc của vim . Chạy:

:%!cut -b36-

để chạy nội dung của bộ đệm của bạn thông qua cutlệnh, chỉ giữ lại các byte 36 trở đi.%có nghĩa là chạy toàn bộ bộ đệm thông qua và thay thế nội dung của nó bằng đầu ra, sau đó !là lệnh bộ lọc, với phần còn lại của dòng là chương trình để chạy. Điều này không sửa đổi tập tin cơ bản trừ khi bạn lưu bộ đệm trên đầu trang.

Để lấy lại bộ đệm chưa được phân loại ban đầu, bạn có thể sử dụng :e, miễn là nó được hỗ trợ bởi một tệp thực.


Và sau đó sử dụng %!cat %để lấy lại? Điều này hoạt động rất tốt và tôi có thể sử dụng một mapchuyển đổi giữa hai người dùng này
user881300

Vâng, điều đó sẽ làm việc, miễn là bạn có một tập tin thực sự sao lưu bộ đệm của bạn.
Michael Homer

3
@Michael Homer: Điều này bây giờ sẽ hoạt động với các ký tự unicode.
cuonglm

6

Tôi nghĩ nhiều hơn phù hợp với những gì bạn đang tìm kiếm là cuộn ngang .

Z là phím lệnh cuộn ngang, theo sau là hướng di chuyển bằng phím mũi tên trái hoặc phải.

Đầu tiên :set nowrapđể vô hiệu hóa gói dòng. Sau đó, báo chí z, 35, di chuyển 35 chỗ.


Điều này rất hữu ích khi đọc nhật ký, cảm ơn bạn!
Fabio F.

ok, tuyệt vời cho một trang duy nhất, nhưng ... Làm thế nào để làm trang xuống hoặc trang lên mà không có con trỏ nhảy trở lại đầu dòng?
elysch

chỉ tìm thấy cách thực hiện trong câu trả lời @ user2987828: bằng cách sử dụng:set nosol
elysch

Đặt con trỏ vào ký tự cuối cùng bạn muốn ẩn. Sau đó nhập ...[Esc] z s
roblogic

2

Trong chế độ lệnh, hãy thử:

:%s/^.\{35}//
  • %s/pat/sub/: thay thế mỗi lần xuất hiện của pat bằng sub
  • ^.\{35}: khớp 35 ký tự đầu tiên của dòng

Lệnh này loại bỏ 35 ký tự đầu tiên của mỗi dòng. Bạn có thể đọc :h regular-expressionđể biết thêm chi tiết về biểu thức chính quy trong vim.


1

Có một giải pháp dễ nhớ, không cần sửa đổi bộ đệm hoặc tệp. Đặt con trỏ vào ký tự đầu tiên ( Lví dụ của bạn) của phần tệp bạn muốn xem, sau đó nhập

:set nowrap
zs

Các zslệnh sẽ thiết lập vi để mà nhân vật xuất hiện với con trỏ ở cột đầu tiên của màn hình. Hãy chắc chắn rằng bạn đã không gõ:set nosol vào tập tin cấu hình của bạn.

Các g$ lệnh sẽ di chuyển con trỏ đến cột có thể nhìn thấy trước.

Các g0 lệnh sẽ di chuyển trở lại con trỏ đến cột có thể nhìn thấy đầu tiên, là chứa L.

Nếu bất kỳ phím nào di chuyển con trỏ sang trái hoặc phải ra khỏi các cột hiển thị, thì các cửa sổ hiển thị sẽ dịch chuyển.


g0lệnh sẽ di chuyển con trỏ của bạn đến cột hiển thị đầu tiên
elysch
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.