ไม่มีใครรู้เกี่ยวกับเครื่องมือแก้ไขข้อความบน 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 filename
vim -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
และเริ่มพิมพ์ชื่อปลั๊กอินและสลับเพื่อแสดงการสิ้นสุดบรรทัด