ดูตัวแบ่งบรรทัดและการขึ้นบรรทัดใหม่ในเอดิเตอร์


180

ไม่มีใครรู้เกี่ยวกับเครื่องมือแก้ไขข้อความบน Linux ที่ทำให้ฉันเห็นการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ Vim รองรับฟีเจอร์นี้หรือไม่?


1
หมายเหตุ: บางครั้งบรรทัดใหม่ ($) และ carriage return (^ M) จะถูกซ่อนอยู่ในโทนสีมากมายและในขณะที่ใช้สีโป๊วถึง ssh
Vanessa Sanchez

1
โอพีฉันคิดว่าคุณควรพิจารณาคำตอบที่เลือก เนื่องจากคำตอบที่เลือกไม่ทำงาน แต่คำตอบ CaptSaltyJack ทำงานได้ดี
JavaSheriff

OP สิ่งที่จะแสดงทั้งสองคือวิธีการแก้ปัญหาของ @arno ฉันต้องการเห็นทั้งสองเพราะฉันมีไฟล์แบบสุ่มโดยใช้รูปแบบไฟล์ทั้ง 3 แบบ ... และวิธีการแก้ปัญหาของ
Wayne Walker

คำตอบ:


139

:set listใน Vim จะแสดงช่องว่าง จุดสิ้นสุดของบรรทัดแสดงเป็น ' $' และการขึ้นบรรทัดใหม่มักแสดงเป็น ' ^M'


2
คำถามเดียวกันที่นี่: superuser.com/questions/97692/…
Alec Jacobson

254
ไม่ถูกต้อง:set listจะไม่แสดง^Mตัวอักษร (CRs) การจัดหา-bตัวเลือกให้กับ vi / vim จะใช้งานได้ หรือเมื่อโหลดเสียงเรียกเข้าให้พิมพ์::e ++ff=unix
CaptSaltyJack

15
หากต้องการปิดโหมด "รายการตั้งค่า" ให้ใช้:set nolist
Tomofumi

@Tomofumi การแก้ไขที่มีข้อเสนอแนะของคุณจะได้รับการต้อนรับ!
Pipo

1
คำตอบที่ไม่ถูกต้อง. : รายการชุดจะไม่แสดงตัวอักษร ^ M (CRs) ใช้ตัวเลือก -b เพื่อ vi / vim จะทำงาน
nanosoft

265

หากไม่เห็นด้วยกับคำตอบอย่างเป็นทางการ:

:set listจะไม่แสดงอักขระ ^ M (CRs) การระบุอ็อพชัน -b ให้กับ vi / vim จะทำงาน :e ++ff=unixหรือเมื่อมีการโหลดเสียงเรียกเข้าประเภท


4
มันคือไวยากรณ์ แสดงให้เห็นว่า:help edit e[dit]! [++opt] [+cmd]และ:help ++eกล่าวว่าการตั้งค่า [++ การเลือก] อาร์กิวเมนต์สามารถนำมาใช้เพื่อบังคับให้ค่า 'fileformat' [ .. ] ที่
เดนนิส

19
เพื่อชี้แจง, :set listแสดง newline ( $), :e ++ff=unixแสดง CR ( ^M); ถ้าคุณต้องการที่จะเห็นทั้งสอง:set listแล้ว:e ++ff=unix
Yibo Yang

5
หากต้องการขยายความคิดเห็นของ @ dennis ให้:set ff=unixบอกเป็นกลุ่มเพื่อเปลี่ยนการสิ้นสุดบรรทัดให้เป็นรูปแบบ unix (เป็นส่วนหนึ่งของการตั้งค่ารูปแบบไฟล์) ดังนั้นอักขระ ^ M จึงไม่มีอีกต่อไป (และจะไม่ปรากฏขึ้นอีก) :e ++ff=unixบอกให้บังคับให้ตั้งค่ารูปแบบไฟล์unixโดยไม่ต้องเปลี่ยนเนื้อหาจริง ดังนั้นกลุ่มจึงอ่านเหมือนไฟล์ Unix เห็นอักขระ CR เป็นพิเศษและแสดงเป็น ^ M
sundar - Reinstate Monica

2
ทั้งยังไม่ทำงานสำหรับฉันvimด้วยเหตุผลบางอย่าง ... ฉันหมายถึงไม่มี-bตัวเลือกหรือ:e ++ff=unixเมื่ออยู่ภายใน :(
RAM237

3
ถูกต้องทั้งหมด: e ++ ff = unix ทำงาน ตอนนี้ฉันจะปิดได้อย่างไร
Croo

78

VI แสดงบรรทัดใหม่ (อักขระ LF, รหัสx0A) โดยแสดงข้อความที่ตามมาในบรรทัดถัดไป

ใช้-bสวิตช์สำหรับโหมดไบนารี เช่นหรือvi -b filenamevim -b filename --

แล้วมันจะแสดงตัวอักษร (CR x0D) ซึ่งไม่ได้ใช้ตามปกติในไฟล์รูปแบบ Unix ^Mเป็นตัวละคร


ปกติฉันไม่จำเป็นต้องเห็นจุดสิ้นสุดของบรรทัดเพราะส่วนใหญ่ฉันทำงานในUnixสภาพแวดล้อม แต่ฉันต้องการได้รับการเตือนเกี่ยวกับการสิ้นสุดบรรทัดชนิด Windows หากมีในไฟล์ จะvi -b filenameหรือ:set binaryเพียงแค่แสดง^Mว่ามันเป็นไฟล์ประเภท windows และไม่มีการสิ้นสุดบรรทัดอื่น ๆ ?
alpha_989

31

เพียงอธิบายให้ชัดเจนว่าทำไม:set listจะไม่แสดง CR ว่า^Mไม่ใช้e ++ff=unixและทำไม:set listไม่มีส่วนเกี่ยวข้องกับ^M's

ภายในเมื่อ Vim อ่านไฟล์ลงในบัฟเฟอร์มันจะแทนที่อักขระที่ลงท้ายด้วยบรรทัดทั้งหมดด้วยการเป็นตัวแทนของมันเอง (ลองเรียกมัน$ว่า) ในการพิจารณาว่าควรลบตัวอักขระใดก่อนจะตรวจพบว่าการจัดเก็บบรรทัดสิ้นสุดของรูปแบบใดในไฟล์ หากมีเพียง CRLF '\r\n'หรือเฉพาะ CR '\r'หรือเฉพาะ LF '\n'ตัวอักษรบรรทัดจบแล้ว'fileformat'มีการตั้งค่าdos, macและunixตามลำดับ

เมื่อlistตั้งค่าตัวเลือก Vim จะแสดง$ตัวอักษรเมื่อมีการแบ่งบรรทัดเกิดขึ้นไม่ว่าfileformatจะตรวจพบตัวเลือกใด มันใช้การแสดงเส้นแบ่งภายในของตัวเองและนั่นคือสิ่งที่มันแสดง

ตอนนี้เมื่อคุณเขียนบัฟเฟอร์ลงบนดิสก์ Vim จะแทรกอักขระบรรทัดสุดท้ายตามสิ่งที่fileformatตรวจพบตัวเลือกโดยการแปลง$อักขระภายในทั้งหมดเป็นอักขระที่เหมาะสม หากfileformatเกิดขึ้นunixแล้วมันก็จะเขียน\nแทนการแบ่งสายภายในของมัน

เคล็ดลับคือการบังคับให้ Vim อ่านdosไฟล์ที่เข้ารหัสเป็นไฟล์unixเดียว ผลกระทบสุทธิก็คือว่ามันจะลบทั้งหมด\n's ออก\r' s แตะต้องและแสดงให้พวกเขาเป็น^M's ในบัฟเฟอร์ของคุณ การตั้งค่า:set listจะแสดงการสิ้นสุดของบรรทัดภายในเพิ่มเติม$ดังนี้ ท้ายที่สุดคุณจะเห็นการ^M$แทนที่dosเส้นแบ่งที่เข้ารหัส

โปรดสังเกตด้วยว่า:set listไม่มีส่วนเกี่ยวข้องกับการแสดง^Mของ คุณสามารถตรวจสอบได้ด้วยตัวเอง (ให้แน่ใจว่าคุณได้ปิดการใช้งานlistตัวเลือกแรก) โดยการแทรก CR เดียวโดยใช้CTRL-Vตามด้วยEnterในโหมดแทรก หลังจากเขียนบัฟเฟอร์แผ่นดิสก์และการเปิดมันอีกครั้งคุณจะเห็น^Mแม้จะมีlistตัวเลือกที่ถูกกำหนดให้เป็น 0

คุณสามารถค้นหาเพิ่มเติมเกี่ยวกับรูปแบบไฟล์ได้ที่http://vim.wikia.com/wiki/File_formatหรือโดยการพิมพ์เป็น:help 'fileformat'กลุ่ม


11

ลองคำสั่งต่อไปนี้

: set binary

ใน VIM สิ่งนี้ควรทำเช่นเดียวกับการใช้ตัวเลือกบรรทัดคำสั่ง "-b" หากคุณใส่ไว้ในไฟล์เริ่มต้น (เช่น. vimrc) ไฟล์จะอยู่ในตำแหน่งของคุณเสมอ

บนระบบ * nix จำนวนมากมีคำสั่ง "dos2unix" หรือ "unix2dos" ที่สามารถประมวลผลไฟล์และแก้ไขปัญหาการสิ้นสุดบรรทัดที่สงสัย หากไม่มีปัญหากับการสิ้นสุดบรรทัดไฟล์จะไม่เปลี่ยนแปลง


แต่น่าเสียดายที่ในระบบของฉัน (Ubuntu 16.04) ไม่ได้เช่นเดียวกับset binary vim -b filename.pyมีความคิดอะไรไหม ฉันตรวจสอบhelpแล้วและดูเหมือนว่าสิ่งที่คุณพูดนั้นถูกต้อง ฉันจะรู้ได้อย่างไรว่าทำไมถึงเป็นเช่นนั้น?
alpha_989

:e ++ff=unixแสดง^Mอย่างถูกต้องและไม่แสดงเมื่อฉันใช้unixไฟล์ประเภท .. ดังนั้นฉันเดาว่าปัญหาจะได้รับการแก้ไขในตอนนี้ ...
alpha_989

6

ฉันแนะนำให้คุณแก้ไขไฟล์. vimrc ของคุณเพื่อเรียกใช้รายการคำสั่ง แก้ไขไฟล์. vimrc ของคุณเช่นนี้:

cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF

เมื่อคุณเรียกใช้ vim คำสั่งใน. vimrc จะถูกเรียกใช้และคุณสามารถดูตัวอย่างนี้:

My line with CRLF eol here ^M¶


0

คุณสามารถดูเส้นแบ่งโดยใช้เครื่องมือแก้ไขgedit

ก่อนอื่นถ้าคุณยังไม่ได้ติดตั้ง:

sudo apt-get install gedit

ตอนนี้ติดตั้งปลั๊กอิน gedit :

sudo apt-get install gedit-plugins

และเลือกปลั๊กอินDraw Spacesป้อนที่การตั้งค่าและเลือกวาดเส้นใหม่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

การใช้VSCodeคุณสามารถติดตั้งส่วนขยายLine endingsได้

Sublime Text 3มีปลั๊กอินชื่อRawLineEditที่จะแสดงการจบบรรทัดและอนุญาตให้มีการแทรกประเภทสิ้นสุดบรรทัดโดยพลการ

shift + ctrl + p และเริ่มพิมพ์ชื่อปลั๊กอินและสลับเพื่อแสดงการสิ้นสุดบรรทัด

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