ฉันสงสัยว่ามีวิธีนับสัญลักษณ์ที่เน้นอยู่ในvim
(รวมถึงช่องว่างสีขาว) หรือไม่?
UPDATE
มันแสดงให้เห็นจำนวนแถวหากการเลือกของฉันอยู่ในหลายแถว ฉันต้องการสัญลักษณ์นับ
ฉันสงสัยว่ามีวิธีนับสัญลักษณ์ที่เน้นอยู่ในvim
(รวมถึงช่องว่างสีขาว) หรือไม่?
UPDATE
มันแสดงให้เห็นจำนวนแถวหากการเลือกของฉันอยู่ในหลายแถว ฉันต้องการสัญลักษณ์นับ
คำตอบ:
Vim ไม่ได้ทำสิ่งนั้นเว้นแต่ว่าฉันทำอะไรหายไป หากฉันเน้นข้อความโดยใช้เมาส์หรือพิมพ์v
และเลื่อนเคอร์เซอร์ฉันจะเห็นที่ด้านล่างของหน้าจอ
- ภาพ - 12
โดยที่หมายเลขด้านขวาคือจำนวนอักขระที่เน้นสี ใช้ได้เฉพาะเมื่อการเลือกอยู่ในแถวเดียวมิฉะนั้นจะแสดงจำนวนแถว
นอกจากนี้คุณยังสามารถเลือกภูมิภาคของข้อความและประเภทg Ctrl-Gที่จะแสดงจำนวนบรรทัดคำและไบต์ที่เลือก
set showcmd
ของคุณvimrc
เพื่อเปิดใช้งาน
เสียงเรียกเข้าพลิกระหว่างการแสดงจำนวนตัวอักษรและการนับบรรทัดสำหรับข้อความที่มองเห็นได้ขึ้นอยู่กับสิ่งที่และวิธีการที่คุณเห็นภาพ (vim 7.4 patched ถึงกันยายน 2015)
V will display line count
v$ will display character count
หากคุณเห็นภาพมากกว่าหนึ่งบรรทัดระบบจะแสดงการนับบรรทัดเท่านั้น
g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
v
สลับปกติจากการนับตัวอักษรไปจนถึงการนับบรรทัดหากการเลือกครอบคลุมหลายบรรทัด อย่างไรก็ตามg CTRL-G
ทำงานได้ดี
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
ก่อนอื่นคุณดึงส่วนที่เลือกปัจจุบัน (เป็นบัฟเฟอร์ x)
จากนั้นคุณแสดงความยาวของบัฟเฟอร์นั้น: strlen(@x)
(The - VISUAL -แสดงในบรรทัดสถานะปิดบังสิ่งนี้ดังนั้นเราจึงต้องเพิ่มบรรทัดใหม่)
ไฮไลต์ช่วงภาพก่อนหน้า: gv
สิ่งนี้ไม่ได้คำนึงว่าโหมดภาพนั้นเป็นแบบ line-, character- หรือ block-mode แต่มันก็เพียงพอแล้วสำหรับกรณีส่วนใหญ่
ฉันเห็นจากภาพหน้าจอของคุณว่าคุณกำลังใช้งาน Windows ดังนั้นคำตอบนี้อาจไม่ช่วยคุณเท่าไหร่ แต่สำหรับคนอื่น ๆ ...
ฟีเจอร์ under-used (IMO) ของ Vim คือการให้คำสั่งภายนอกทำการยกของหนัก
สำหรับกรณีนี้หากคุณอยู่ในระบบคล้าย UNIX คุณสามารถใช้wc
คำสั่งเพื่อทำเช่นนั้นได้
วิธีที่ง่ายที่สุดคือการแทนที่ข้อความที่เลือกด้วยผลลัพธ์ของคำสั่งโดยพิมพ์ (ด้วยข้อความที่เลือก):
:!wc
(จากนั้นกด Enter)
สิ่งนี้จะแสดงในบรรทัดคำสั่งของคุณดังนี้:
'<,'>!wc
หลังจากที่คุณอ่านข้อมูลคุณสามารถเลิกทำu
เพื่อกลับไปยังที่ที่คุณเริ่ม
หมายเหตุ: การประมวลผลนี้ดำเนินการกับทั้งบรรทัดเท่านั้น หากคุณต้องการเส้นบางส่วนฉันคิดว่า @ garyjohn g_CTRL-G
เป็นทางออกที่ดีที่สุดของคุณ
คุณสามารถหลีกเลี่ยงความจำเป็นในการเลิกทำโดยเรียกใช้แทน:
:w !wc
"เขียน" บรรทัดที่เลือกนี้ไปยังอินพุตมาตรฐานของคำสั่งและผลลัพธ์ของคำสั่งจะแสดงในบัฟเฟอร์ชั่วคราวใหม่โดยไม่ต้องแตะต้องเดิม ดู:help :write_c
ข้อมูลเพิ่มเติม
หมายเหตุ: ฉันได้รับ:write_c
ข้อมูลจาก: /programming/1237780/vim-execute-shell-command-without-filtering
ตอนนี้โดยทั่วไป:
ตัวอย่างนี้มีความwc
เรียบง่าย แต่คุณสามารถจินตนาการว่านี่เป็นวิธีการที่ทรงพลังได้อย่างไร UNIX มีคำสั่งประมวลผลข้อความจำนวนมากที่มีอยู่แล้วและคุณสามารถใช้คำสั่งเหล่านั้นใน Vim ได้อย่างง่ายดายโดยไม่จำเป็นต้องสัมผัส Vimscript (yech)
นอกจากนี้โปรแกรม commandline ใด ๆ ที่คุณเขียนว่าดีลกับ stdin / stdout จะไม่เพียง แต่ให้ประโยชน์แก่คุณในเทอร์มินัลของคุณ แต่ยังอยู่ใน Vim ด้วย
ตัวอย่างเช่นฉันพบว่าตัวเองทำงานtidy
และjson-format
จากภายในเป็นกลุ่มเพื่อทำให้ไฟล์ที่ฉันดูอ่านง่ายขึ้น
คุณสามารถทำสิ่งเดียวกันบน Windows ได้ แต่ Windows ไม่มีชุดคำสั่งในตัวมากมาย คุณสามารถติดตั้งGNUWin32หรือที่คล้ายกันเพื่อรับสิทธิประโยชน์เหล่านั้นได้ตลอดเวลา
สำหรับวิธีการเขียนโปรแกรมภายใน vimscript สิ่งนี้ใช้ได้สำหรับฉันเมื่อการเลือกถูก จำกัด ภายในหนึ่งบรรทัด:
let amount = virtcol("'>") - virtcol("'<")
(การใช้virtcol(..)
แทนcol(..)
จะทำงานได้ตามที่คาดไว้เมื่อ:set ve=all
มีการใช้งาน)