คำถามติดแท็ก vimscript

ภาษาสคริปต์ฝังอยู่ใน Vim สามารถใช้ปรับแต่ง Vim ให้เหมาะกับความต้องการของคุณและสร้างปลั๊กอินได้ เรียกอีกอย่างว่า VimL

5
ตรวจจับระบบปฏิบัติการใน Vimscript
ฉันสามารถดึงระบบปฏิบัติการปัจจุบัน (Windows, Linux, OS X, .. ) โดยใช้pure Vimscript (ไม่มี Python หรือ Perl) ได้หรือไม่? ฉันต้องการเปิดใช้งานการตั้งค่าที่แตกต่างกันใน (ซิงโครไนซ์) .vimrcสำหรับระบบปฏิบัติการประเภทต่างๆที่ฉันใช้อยู่
37 vimscript 

4
วิธีการสร้างฟังก์ชั่น vimscript ด้วยอาร์กิวเมนต์ที่เป็นตัวเลือก?
ฉันต้องการสร้างฟังก์ชันที่มีอาร์กิวเมนต์เป็นตัวเลือก ในหลามฉันจะทำสิ่งนี้: def functionName(arg1,arg2=false,arg3=false): if arg2: #Do stuff with arguments else: #Do stuff without arguments ฉันได้ลองทำfunction FunctionName(arg1,arg2=false,arg3=false)แล้ว แต่มันก็ทำให้ฉันมีข้อผิดพลาดในการบอกว่าอาร์กิวเมนต์ไม่ถูกต้อง ฉันจะทำสิ่งนี้ใน vimscript ได้อย่างไร
33 vimscript 

3
คุณ“ chomp” สตริงใน Vim ได้อย่างไร?
สมมติว่าคุณใช้ vimscript ในส่วนต่อไปนี้: let @z = system("date") สิ่งนี้จะใส่สตริงของวันที่ปัจจุบันลงใน z register แต่สตริงจะลงท้ายด้วยการขึ้นบรรทัดใหม่ที่ฉันไม่ต้องการ มีวิธีการในตัว (คล้ายกับ Perl ของchomp) เพื่อกำจัดบรรทัดใหม่ต่อท้ายของสตริง?
32 vimscript 

1
ใช้ตัวดำเนินการตามเงื่อนไข AND หรือ OR ในคำสั่ง IF หรือไม่
นี่อาจเป็นคำถามง่าย ๆ อย่างเหลือเชื่อ แต่ฉันไม่พบคำตอบใด ๆ (ฉันต้องขาดแหล่งข้อมูลที่ถูกต้องและฉันไม่รู้ว่าจะค้นหาด้วยความช่วยเหลือของกลุ่มใด) ฉันมีเงื่อนไขและฉันต้องการให้รวม 'และ' เช่น if (condition1 .AND. condition2) "do what I want you to do endif แต่ฉันไม่พบไวยากรณ์ สิ่งเดียวกันสำหรับ 'OR'
30 vimscript 

2
ความแตกต่างระหว่างการปล่อยและการตั้งค่าคืออะไร?
ฉันไม่รู้ทฤษฎีเบื้องหลัง Vim มากนัก ดูเหมือนว่าเราsetมีตัวแปรและletตัวแปรอื่น ๆ ความแตกต่างคืออะไรและเมื่อใดที่หนึ่งต้องการมากกว่าอีกอันหนึ่ง? นอกจากนี้ solarchim vim colours พูดกับlet g:blabla...ความสำคัญของg:ในกรณีนี้คืออะไร?
29 vimrc  vimscript 

6
ฉันจะสนุกกับ Vim ได้อย่างไร? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Vi และ Vim Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันรักที่เป็นกลุ่ม ฉันใช้ชีวิตทั้งชีวิตโดยใช้มัน: ที่ทำงานฉันพัฒนาโค้ดด้วย Vim ฉันจะแก้ไขไฟล์ปรับแต่งด้วยฉันเขียนอีเมลด้วย ที่บ้านฉันเขียนรายการสิ่งที่ต้องทำและรายการถังของฉันด้วย ในเวลาว่างของฉันฉันเขียนหนังสือ ฉันไปพบปะเกี่ยวกับกลุ่มและฉันพยายามที่จะโน้มน้าวให้ทุกคนที่ผมรู้ว่าจะใช้มัน( แต่น่าเสียดายที่คุณยายของฉันไม่เห็นว่าเธอควรจะใช้มันเพื่อตัวอักษรเขียนไปยังเพื่อน ๆ ของเธอ) ด้วยความรักที่มีให้กับบรรณาธิการที่รักของเราทั้งหมดนี้ฉันกำลังเผชิญกับปัญหาใหญ่: ในฐานะมนุษย์ที่บัญญัติขึ้นตามปกติบางครั้งฉันก็ต้องการที่จะผ่อนคลายและสนุก โดยธรรมชาติแล้วฉันต้องการที่จะทำเช่นนั้นในเครื่องมือแก้ไขที่เคร่งศาสนาของเรา แต่ฉันไม่รู้ว่าฉันจะทำสิ่งนั้นได้อย่างไร แน่นอนว่าฉันใช้เวลาหลายชั่วโมงในการปรับแต่งโทนสีของฉันและการเขียนมาโครแบบเรียกซ้ำที่ฉันดูเป็นเวลานาน แต่หลังจากหกถึงเจ็ดชั่วโมงมันไม่สนุกเลย ดังนั้นฉันจึงโทรหาคุณเพื่อน Vimmers: ฉันจะสนุกกับ Vim ได้อย่างไร? แก้ไขโพสต์นี้เห็นได้ชัดว่าคนโง่ของเมษายน(แน่นอนรักยายของฉันที่จะใช้เป็นกลุ่ม) ขอบคุณสำหรับคำตอบและความคิดเห็นของคุณมีการแนะนำแนวคิดที่เจ๋ง ๆ ให้ฟัง
25 vimscript 

1
เรียกใช้ฟังก์ชัน Vim แบบเงียบ ๆ
ฉันเขียนฟังก์ชัน Vim เล็กน้อยที่เลื่อนเคอร์เซอร์ไปที่อักขระตัวแรกของบรรทัดปัจจุบัน หากเคอร์เซอร์อยู่บนอักขระตัวแรกอยู่แล้วเคอร์เซอร์จะถูกย้ายไปที่คอลัมน์แรกแทน " Jump to first character or column noremap H :call FirstCharOrFirstCol()<cr> :function! FirstCharOrFirstCol() : let current_col = virtcol('.') : normal ^ : let first_char = virtcol('.') : if current_col == first_char : normal 0 : endif :endfunction ฉันจะเรียกฟังก์ชั่นนี้อย่างเงียบ ๆ ได้อย่างไร? ฉันต้องการ ': โทร FirstCharOrFirstCol ()' ไม่ปรากฏในบรรทัดสถานะ …
25 vimscript 


2
แยกผลลัพธ์ของคำสั่งเชลล์ไปยังตัวแปรในไฟล์. vimrc หรือไม่
ในไฟล์. vimrc ของฉันฉันต้องการเก็บไว้ในตัวแปรผลลัพธ์ของคำสั่งภายนอกในกรณีของฉัน: $ echo $LANG ดังนั้นvimrcไฟล์ของฉันจะมี: let language = output(!echo $LANG) if language == 'en' nnoremap <somekey> <ohanotherkey!> end if จนถึงตอนนี้ฉันไม่สามารถหาวิธีการได้ ฉันพบว่าในโหมดคำสั่ง:read !echo $LANGจะแทรกเนื้อหาที่ฉันกำลังค้นหาในไฟล์ปัจจุบันของฉัน แต่ฉันไม่รู้วิธีเขียนลงในไฟล์ vimrc

2
วิธีที่ง่ายที่สุดในการเริ่ม Vim ในโหมดส่วนตัว
ฉันต้องการเริ่ม Vim ในโหมดส่วนตัวได้อย่างง่ายดาย ลองกำหนดโหมดส่วนตัวเป็นโหมดที่ใช้ชุดคำสั่งนี้: set history=0 set nobackup set nomodeline set noshelltemp set noswapfile set noundofile set nowritebackup set secure set viminfo="" แจ้งให้เราทราบหากคุณสามารถนึกถึงคำสั่งเพิ่มเติมที่เหมาะสมกับโหมดส่วนตัว ประเด็นคือฉันไม่สามารถคิดถึงวิธีที่สั้นและง่ายในการเริ่ม Vim ด้วยการตั้งค่านี้ นี่คือแนวคิดที่ฉันคิดไว้: โหลด. vimrcprivate แทน. vimrc คุณสามารถใส่คำสั่งที่จำเป็นทั้งหมดลงใน. vrrcprivate แล้วเริ่ม Vim ดังนี้: vim -u .vimrcprivate กำหนดและเรียกใช้Private()ฟังก์ชัน แนวคิดอื่นเพิ่มรหัสเช่นนี้ใน. vimrc ของคุณ: function Private() " set of commands here …

1
ความแตกต่างระหว่างสตริงที่ยกมาเดี่ยวและสองครั้งคืออะไร?
ความแตกต่างระหว่างสตริงที่ยกมาเดี่ยวและสองครั้งคืออะไร? มีวิธีการรับตัวแปรขยายภายในสตริงหรือไม่พวกเขาจำเป็นต้องเข้าร่วมเช่น: 'Hello, ' . s:name . '!'

5
หลังจากคัดลอกส่วนที่เลือกไปยังแป้นพิมพ์กลับไปที่ตำแหน่งเดิม
เคอร์เซอร์ของฉันอยู่ตรงกลางของย่อหน้าเมื่อฉันตัดสินใจกะทันหันฉันต้องคัดลอกย่อหน้านั้น: ดังนั้นฉันพิมพ์vipเพื่อเลือกย่อหน้าที่มองเห็นได้: ตอนนี้ฉันกดcmd+Cเพื่อคัดลอกไปยังคลิปบอร์ด (อาจแตกต่างกันไปในระบบของคุณ แต่ไม่ควรเกี่ยวข้องกับคำถามกลางของโพสต์ของฉัน) ซึ่งทำให้เคอร์เซอร์ของฉันอยู่ที่จุดเริ่มต้นของย่อหน้า: มากกว่าตำแหน่งที่ต้องการซึ่งเป็นตอนที่ฉันเริ่ม หมายเหตุ: yipปัญหาเดียวกันเกิดขึ้นเมื่อลากเลือกไม่ใช่สายตาด้วย ฉันต้องการพฤติกรรมเริ่มต้นที่จะ "กลับสู่ตำแหน่งเคอร์เซอร์เดิม" หลังจากทำการเลือก / คัดลอกการกระทำเช่นนี้ มีการกำหนดค่าที่ทำให้สิ่งนี้เป็นไปได้หรือไม่?

2
ความแตกต่างระหว่างชุดและ: ชุดคืออะไร?
ฉันกำลังดูปลั๊กอินที่ใช้งานง่ายของTim Popeและฉันสังเกตเห็นสิ่งนี้ใน README ... ดูแหล่งข้อมูลสำหรับรายการคุณสมบัติที่เชื่อถือได้ (ไม่ต้องกังวลมันเป็น:setสายส่วนใหญ่) เมื่อฉันดูที่ต้นทางการ:setโทรเป็นแบบนี้ ... set autoindent ไม่มีการก่อน:set ฉันค่อนข้างแน่ใจว่าฉันเคยเห็น:setในตัวอย่าง.vimrcของจริงเช่นกัน อะไรคือความแตกต่าง? ซึ่งรูปแบบที่ฉันควรใช้ในของฉัน.vimrc?
17 vimscript  vimrc 

1
เหตุใดฉันจึงได้รับข้อผิดพลาด“ E488: ตัวอักษรต่อท้าย” ในคำสั่งที่กำหนดเองนี้
ฉันมี~/.vimrcที่มีเพียงแค่นี้: function! NewFile() let filename = input("Filename:") endfunction command NewFile :call NewFile()<cr> (แน่นอนความจริงของฉัน.vimrcซับซ้อนกว่า แต่ฉันได้สร้างกรณีทดสอบเล็ก ๆ นี้ขึ้นมาใหม่โดยไม่มีปลั๊กอิน ฯลฯ ) ฉันตั้งใจจะเขียนฟังก์ชั่นที่รองรับการสร้างไฟล์ใหม่ตามเทมเพลต บางรายการอินพุตจะถูกถามจากผู้ใช้ vi เช่นชื่อของไฟล์ ฟังก์ชั่นยังไม่ซับซ้อน (พูดน้อย!) - ทั้งหมดที่ทำคือขอชื่อไฟล์ เมื่อฉันใช้คำสั่งNewFileจากบรรทัดคำสั่ง vi มันเริ่มต้น แต่เมื่อฉันป้อนชื่อไฟล์และกด Enter ฉันได้รับข้อผิดพลาด: E488: Trailing characters ทำไมถึงเป็นอย่างนั้น? ผมทำอะไรผิดหรือเปล่า?

4
ตั้งค่าตัวเลือกการวาง แต่สำหรับการแทรกเพียงครั้งเดียวเท่านั้น
ฉันต้องการวิธีที่รวดเร็วในการตั้งค่า'paste'ตัวเลือกVim การแทรกข้อความบางส่วนและเปลี่ยนเป็นค่าก่อนหน้า'paste'เป็น กรณีการใช้งานทั่วไปแทรกเนื้อหาคลิปบอร์ดของระบบปฏิบัติการอย่างแท้จริงโดยไม่คำนึงถึงการเขียนโหมดแทรกใด ๆ ที่อาจใช้งานเช่นการเยื้องอัตโนมัติและโดยไม่ต้องเปลี่ยนสถานะของ Vim อีกกรณีการใช้งานคือการอนุญาตให้มีคุณสมบัติแมโคร OS เพื่อแทรกการกดแป้นพิมพ์เป็นกลุ่มและให้พวกเขาตีความเป็นข้อความตามตัวอักษร เห็นได้ชัดว่านี่เป็นการสรุปให้กับตัวเลือกอื่น ๆ - แนวคิดทั่วไปคือการตั้งค่าตัวเลือกบางอย่าง แต่สำหรับระยะเวลาหนึ่งการเดินทางผ่านโหมดแทรก โดยทั่วไปฉันต้องการผูกลำดับสำคัญ (พูด_i) กับมาโครที่ทำสิ่งนี้ :set paste i…<Esc> :set nopaste โดยที่i…<Esc>ฉันหมายถึงเปลี่ยนเป็นโหมดแทรก (เช่นเดียวกับiคำสั่ง) และกลับมาโครเมื่อกลับสู่โหมดคำสั่งยกเว้นว่าฉันต้องการที่จะจบลงด้วยการ'paste'ยังคงใช้งานอยู่หากมันใช้งานอยู่ก่อน ฉันจะทำสิ่งนี้ได้อย่างไร หมายเหตุ: เนื้อหาของคลิปบอร์ด OS ที่ถูกแมปไปลงทะเบียน"* เมื่อใช้งานได้'paste'ตัวเลือกจะไม่มีประโยชน์มาก สถานการณ์ที่สร้างแรงจูงใจสำหรับคำถามนี้สำหรับช่วงเวลาที่ไม่ตรงตามเงื่อนไขสำหรับ"*การสนับสนุนการลงทะเบียน - Vim ไม่ได้รวบรวม+xterm_clipboardคุณสมบัติหรือกำลังทำงานในเทอร์มินัลเช่นหน้าจอหรือ SSH เหนือซึ่งแยกจากเซิร์ฟเวอร์ X แวดล้อม

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