ไม่มีใครรู้เกี่ยวกับเครื่องมือแก้ไขข้อความบน Linux ที่ทำให้ฉันเห็นการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ Vim รองรับฟีเจอร์นี้หรือไม่?
ไม่มีใครรู้เกี่ยวกับเครื่องมือแก้ไขข้อความบน Linux ที่ทำให้ฉันเห็นการขึ้นบรรทัดใหม่และการขึ้นบรรทัดใหม่ Vim รองรับฟีเจอร์นี้หรือไม่?
คำตอบ:
:set listใน Vim จะแสดงช่องว่าง จุดสิ้นสุดของบรรทัดแสดงเป็น ' $' และการขึ้นบรรทัดใหม่มักแสดงเป็น ' ^M'
:set listจะไม่แสดง^Mตัวอักษร (CRs) การจัดหา-bตัวเลือกให้กับ vi / vim จะใช้งานได้ หรือเมื่อโหลดเสียงเรียกเข้าให้พิมพ์::e ++ff=unix
:set nolist
หากไม่เห็นด้วยกับคำตอบอย่างเป็นทางการ:
:set listจะไม่แสดงอักขระ ^ M (CRs) การระบุอ็อพชัน -b ให้กับ vi / vim จะทำงาน :e ++ff=unixหรือเมื่อมีการโหลดเสียงเรียกเข้าประเภท
:help edit e[dit]! [++opt] [+cmd]และ:help ++eกล่าวว่าการตั้งค่า [++ การเลือก] อาร์กิวเมนต์สามารถนำมาใช้เพื่อบังคับให้ค่า 'fileformat' [ .. ] ที่
:set listแสดง newline ( $), :e ++ff=unixแสดง CR ( ^M); ถ้าคุณต้องการที่จะเห็นทั้งสอง:set listแล้ว:e ++ff=unix
:set ff=unixบอกเป็นกลุ่มเพื่อเปลี่ยนการสิ้นสุดบรรทัดให้เป็นรูปแบบ unix (เป็นส่วนหนึ่งของการตั้งค่ารูปแบบไฟล์) ดังนั้นอักขระ ^ M จึงไม่มีอีกต่อไป (และจะไม่ปรากฏขึ้นอีก) :e ++ff=unixบอกให้บังคับให้ตั้งค่ารูปแบบไฟล์unixโดยไม่ต้องเปลี่ยนเนื้อหาจริง ดังนั้นกลุ่มจึงอ่านเหมือนไฟล์ Unix เห็นอักขระ CR เป็นพิเศษและแสดงเป็น ^ M
vimด้วยเหตุผลบางอย่าง ... ฉันหมายถึงไม่มี-bตัวเลือกหรือ:e ++ff=unixเมื่ออยู่ภายใน :(
VI แสดงบรรทัดใหม่ (อักขระ LF, รหัสx0A) โดยแสดงข้อความที่ตามมาในบรรทัดถัดไป
ใช้-bสวิตช์สำหรับโหมดไบนารี เช่นหรือvi -b filenamevim -b filename --
แล้วมันจะแสดงตัวอักษร (CR x0D) ซึ่งไม่ได้ใช้ตามปกติในไฟล์รูปแบบ Unix ^Mเป็นตัวละคร
Unixสภาพแวดล้อม แต่ฉันต้องการได้รับการเตือนเกี่ยวกับการสิ้นสุดบรรทัดชนิด Windows หากมีในไฟล์ จะvi -b filenameหรือ:set binaryเพียงแค่แสดง^Mว่ามันเป็นไฟล์ประเภท windows และไม่มีการสิ้นสุดบรรทัดอื่น ๆ ?
เพียงอธิบายให้ชัดเจนว่าทำไม: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'กลุ่ม
ลองคำสั่งต่อไปนี้
: set binary
ใน VIM สิ่งนี้ควรทำเช่นเดียวกับการใช้ตัวเลือกบรรทัดคำสั่ง "-b" หากคุณใส่ไว้ในไฟล์เริ่มต้น (เช่น. vimrc) ไฟล์จะอยู่ในตำแหน่งของคุณเสมอ
บนระบบ * nix จำนวนมากมีคำสั่ง "dos2unix" หรือ "unix2dos" ที่สามารถประมวลผลไฟล์และแก้ไขปัญหาการสิ้นสุดบรรทัดที่สงสัย หากไม่มีปัญหากับการสิ้นสุดบรรทัดไฟล์จะไม่เปลี่ยนแปลง
set binary vim -b filename.pyมีความคิดอะไรไหม ฉันตรวจสอบhelpแล้วและดูเหมือนว่าสิ่งที่คุณพูดนั้นถูกต้อง ฉันจะรู้ได้อย่างไรว่าทำไมถึงเป็นเช่นนั้น?
:e ++ff=unixแสดง^Mอย่างถูกต้องและไม่แสดงเมื่อฉันใช้unixไฟล์ประเภท .. ดังนั้นฉันเดาว่าปัญหาจะได้รับการแก้ไขในตอนนี้ ...
ฉันแนะนำให้คุณแก้ไขไฟล์. 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¶
โดยใช้catและ-Aคุณสามารถเห็นบรรทัดใหม่เป็น$แท็บเป็น^I
cat -A myfile
คุณสามารถดูเส้นแบ่งโดยใช้เครื่องมือแก้ไข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 และเริ่มพิมพ์ชื่อปลั๊กอินและสลับเพื่อแสดงการสิ้นสุดบรรทัด