เป็นกลุ่ม: ซ่อนตัวอักษร n ตัวแรกของทุกบรรทัดในไฟล์


12

ฉันกำลังวิเคราะห์ล็อกไฟล์โดยใช้ vim และรูปแบบมีลักษณะเช่นนี้

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

ตั้งแต่ส่วนใหญ่ฉันไม่สนใจเกี่ยวกับวันที่และเวลา ฉันต้องการซ่อนพวกเขาและเพียงแค่มุ่งเน้นไปที่คอลัมน์ชื่อและ LogText (เพื่อบันทึกหน้าจอบางส่วน) เนื่องจากสามคอลัมน์แรกจะมีตัวอักษร 35 ตัวแรกเสมอในบรรทัด มีวิธีที่จะทำให้เป็นกลุ่มไม่แสดง 35 ตัวอักษรแรกของแต่ละบรรทัด?


ฉันไม่ทราบว่าคุณทำมันเป็นกลุ่มได้อย่างไร แต่ถ้าคุณไม่สนใจที่จะสร้างไฟล์ชั่วคราวคุณสามารถเรียกใช้cut -c36- logfile > logfile_with_first_35_chars_missingแล้วตรวจสอบได้
Warwick

คำตอบ:


7

คุณถามถึงวิธีซ่อนตัวอักษรตัวแรกไม่ลบหรือเลื่อนออกจากสายตา - ดังนั้นนี่คือวิธีซ่อนตัวอักษร:

ซ่อนข้อความเป็นกลุ่มโดยใช้ปกปิด

คุณสามารถใช้การจับคู่รวมกับการเน้นไวยากรณ์และคุณลักษณะปกปิดเพื่อไม่แสดงอักขระที่ตรงกันภายในบรรทัด

หากต้องการซ่อน 25 อักขระแรกของแต่ละบรรทัด:

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

หากต้องการซ่อนเฉพาะเส้นที่มีเครื่องหมายวรรคตอนของวันที่แทน:

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

วิธียกเลิกการซ่อน:

:syn clear Concealed
:set conceallevel=0

อะไรที่เป็นปกติ:

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

จะมีลักษณะเช่นนี้หลังจากดำเนินการสองคำสั่งแรก:

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


ดูเพิ่มเติมที่ - ด้านในvim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(แจ้งให้เราทราบหากมันไม่ทำงานเช่นนั้น - อาจมีการตั้งค่าเพิ่มเติมที่ฉันไม่ทราบหรือมากกว่านั้น - ฉันจะทำให้มันทำงานได้)


1
ใช้งานได้ดีฉันคิดว่ากลุ่มจำเป็นต้องคอมไพล์ด้วย+concealตัวเลือก (ของฉันคือ) เพื่อให้ทำงานได้ ยังดีที่จะทำset concealcursor=ncเพื่อป้องกันไม่ให้เส้นเคอร์เซอร์ขยาย
user881300

ใช่+concealตัวเลือกคุณสมบัติเป็นมาตรฐานเหมือนบางปี น่าเศร้าที่ตอนนี้ยังไม่เป็นที่รู้จักมากขึ้น มันยอดเยี่ยมและยืดหยุ่นจริงๆ จะช่วยให้จำนวนมากของตัวเลือกใหม่ ...
Volker ซีเกล

8

การใช้งานที่เป็นกลุ่มของการทำงานของตัวกรอง วิ่ง:

:%!cut -b36-

เพื่อเรียกใช้เนื้อหาของบัฟเฟอร์ของคุณผ่านcutคำสั่งโดยรักษาเฉพาะไบต์ที่ 36 ขึ้นไป %หมายถึงการเรียกใช้บัฟเฟอร์ทั้งหมดผ่านและแทนที่เนื้อหาด้วยเอาต์พุตจากนั้น!เป็นคำสั่งตัวกรองที่มีส่วนที่เหลือของบรรทัดเป็นโปรแกรมที่จะทำงาน สิ่งนี้จะไม่แก้ไขไฟล์ต้นแบบเว้นแต่คุณจะบันทึกบัฟเฟอร์ไว้ด้านบน

ในการรับบัฟเฟอร์ที่ไม่ได้รับการซ่อมแซมกลับมาคุณสามารถใช้ได้โดย:eมีการสำรองข้อมูลด้วยไฟล์จริง


แล้วใช้%!cat %เพื่อนำมันกลับมา? มันใช้งานได้ดีมากและฉันสามารถใช้mapเพื่อสลับระหว่างสองผู้ใช้นี้ได้
user881300

ใช่มันจะทำงานได้ตราบใดที่คุณมีไฟล์จริงที่สำรองบัฟเฟอร์ของคุณ
Michael Homer

3
@Michael Homer: ตอนนี้จะทำงานกับอักขระ Unicode
cuonglm

6

ผมคิดว่ามากขึ้นสอดคล้องกับสิ่งที่คุณกำลังมองหาคือเลื่อนแนวนอน

Z เป็นปุ่มคำสั่งเลื่อนแนวนอนแล้วตามด้วยทิศทางเพื่อเลื่อนด้วยปุ่มลูกศรซ้ายหรือขวา

ก่อนอื่น:set nowrapให้ปิดการใช้งานการตัดบรรทัด จากนั้นกดz, 35, เพื่อเลื่อน 35 พื้นที่


สิ่งนี้มีประโยชน์มากเมื่ออ่านบันทึกขอบคุณ!
Fabio F.

ตกลงดีมากสำหรับหน้าเดียว แต่ ... จะเลื่อนหน้าลงหรือเลื่อนขึ้นโดยไม่เลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดได้อย่างไร
elysch

เพิ่งพบวิธีการทำใน @ user2987828 คำตอบ: using:set nosol
elysch

วางเคอร์เซอร์บนอักขระตัวสุดท้ายที่คุณต้องการซ่อน จากนั้นพิมพ์ ...[Esc] z s
roblogic

2

ในโหมดคำสั่งลอง:

:%s/^.\{35}//
  • %s/pat/sub/: เปลี่ยนเกิดขึ้นของแต่ละpatกับย่อย
  • ^.\{35}: จับคู่ 35 บรรทัดแรกของอักขระ

คำสั่งนี้ลบ 35 อักขระแรกของแต่ละบรรทัด คุณสามารถอ่านรายละเอียดเพิ่มเติมเกี่ยวกับการแสดงออกปกติใน:h regular-expressionvim


1

มีวิธีแก้ไขปัญหาที่ง่ายต่อการจำโดยไม่ต้องแก้ไขบัฟเฟอร์หรือไฟล์ วางเคอร์เซอร์ของคุณบนอักขระตัวแรก ( Lในตัวอย่างของคุณ) ของส่วนไฟล์ที่คุณต้องการดูจากนั้นพิมพ์

:set nowrap
zs

zsคำสั่ง vi ประสงค์การติดตั้งเพื่อที่ว่าตัวละครที่มีปรากฏเคอร์เซอร์ในคอลัมน์แรกของหน้าจอ ตรวจสอบให้แน่ใจว่าคุณไม่ได้พิมพ์:set nosolไฟล์กำหนดค่าของคุณ

g$คำสั่งจะเลื่อนเคอร์เซอร์ไปคอลัมน์มองเห็นล่าสุด

g0คำสั่งจะย้ายกลับเคอร์เซอร์ของคุณเพื่อคอลัมน์แรกที่มองเห็นอย่างใดอย่างหนึ่งที่มีแอล

หากปุ่มใด ๆ เลื่อนเคอร์เซอร์ไปทางซ้ายหรือขวาจากคอลัมน์ที่มองเห็นได้หน้าต่างที่มองเห็นจะเปลี่ยนไป


และg0คำสั่งจะเลื่อนเคอร์เซอร์ของคุณไปที่คอลัมน์แรกที่ปรากฏ
elysch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.