Vim - จะเรียกใช้คำสั่งทันทีเมื่อเริ่มเป็นกลุ่มได้อย่างไร


107

ฉันมีปลั๊กอิน (FindFile.vim) ที่ต้องทำงาน:FindFileCache .เมื่อใดก็ตามที่ฉันเริ่มเป็นกลุ่มเพื่อรวบรวมแคชไฟล์สำหรับการเปิดอย่างรวดเร็ว .. ฉันต้องเรียกใช้สิ่งนี้ทุกครั้งที่เริ่มเป็นกลุ่ม

ฉันจะเขียนคำสั่งที่รันครั้งเดียวทุกครั้งที่ vim เริ่มทำงานได้อย่างไร

คำตอบ:


146

สถานที่ที่ดีที่สุดในการเก็บข้อมูลการกำหนดค่าของคุณอยู่ใน ไฟล์. vimrc อย่างไรก็ตามมีที่มาเร็วเกินไปตรวจสอบ:h startup:

At startup, Vim checks environment variables and files and sets values
accordingly.  Vim proceeds in this order:

1. Set the 'shell' and 'term' option                *SHELL* *COMSPEC* *TERM*
2. Process the arguments
3. Execute Ex commands, from environment variables and/or files *vimrc* *exrc*
4. Load the plugin scripts.                                 *load-plugins*
5. Set 'shellpipe' and 'shellredir'
6. Set 'updatecount' to zero, if "-n" command argument used
7. Set binary options
8. Perform GUI initializations
9. Read the viminfo file
10. Read the quickfix file
11. Open all windows
12. Execute startup commands

อย่างที่คุณเห็น. vimrcของคุณจะโหลดก่อนปลั๊กอิน หากคุณใส่:FindFileCache .ไว้ข้อผิดพลาดจะเกิดขึ้นเนื่องจากยังไม่มีคำสั่งนั้น (จะมีอยู่เมื่อโหลดปลั๊กอินในขั้นตอนที่ 4)

ในการแก้ปัญหานี้แทนที่จะดำเนินการคำสั่งโดยตรงให้สร้างคำสั่งอัตโนมัติ คำสั่งอัตโนมัติดำเนินการบางคำสั่งเมื่อมีเหตุการณ์เกิดขึ้น ในกรณีนี้เหตุการณ์VimEnterดูเหมาะสม (จาก:h VimEnter):

                                                    *VimEnter*
VimEnter                    After doing all the startup stuff, including
                            loading .vimrc files, executing the "-c cmd"
                            arguments, creating all windows and loading
                            the buffers in them.

จากนั้นวางบรรทัดนี้ใน. vimrcของคุณ:

autocmd VimEnter * FindFileCache .

3
+1 นี่ควรเป็นคำตอบที่ยอมรับได้มันสะอาดกว่าการสร้างไฟล์แยกสำหรับคำสั่งเดียว

ต้องการเพิ่มฉันหยุดพักนี้กับฉันด้วย E172 เพราะฉันมีที่ว่างหลังจากนั้น
Caroline

ลองใช้วิธีนี้ในการโทร: AnsiEsc แต่มันไม่ได้เอฟเฟกต์ที่ต้องการจริงๆ - มีโอกาสที่คุณจะรู้วิธีตรวจสอบว่าคำสั่งเช่น: AnsiEsc ถูกรันมาก่อนหรือไม่?
serup

1
วิธีนี้สามารถแก้ปัญหาได้มากมายขอบคุณมากสำหรับการสร้างโพสต์นี้
Saeid

90

นอกจากนี้ยังมีแฟล็ก -c ของกลุ่ม ฉันทำสิ่งนี้ใน tmuxp config เพื่อให้ vim เริ่มต้นด้วยการแยกแนวตั้ง:

vim -c "vnew"

อย่างน้อยด้วย neovim คุณยังสามารถเปิดไฟล์ได้ในเวลาเดียวกัน:

nvim -c "colorscheme mustang" some_file

6
ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา บางครั้งฉันต้องเรียกใช้คำสั่งเริ่มต้นชั่วคราวเช่นแยกตามที่คุณแสดงและไม่จำเป็นต้องเก็บสิ่งนี้ไว้ในไฟล์ vimrc ของฉัน
verboze

ไฟล์นี้เปิดไม่ได้:vim -c ':colo default' test.txt
van abel

1
เหมาะสำหรับฉันด้วย - ฉันกำลังใช้xolox/vim-notesและฉันต้องการฟังก์ชั่น fish ที่เปิด Vim พร้อมโน้ตใหม่ที่พร้อมใช้งาน
wsams

13

สร้างไฟล์ชื่อ~/.vim/after/plugin/whatever_name_you_like.vimและเติมด้วย

FindFileCache .

ลำดับที่สคริปต์ถูกอ่านและดำเนินการในไดเร็กทอรีกลุ่มถูกอธิบายไว้ใน :help 'runtimepath'


2

หากต้องการรับคำตอบที่ช้ากว่าคำตอบอื่น ๆ แต่ยังคงอยู่หลังจากเริ่มต้นใช้งานให้ใช้ตัวจับเวลาใน. vimrc ตัวอย่างเช่นรหัสนี้ใน. vimrc รอครึ่งวินาทีหลังจากเริ่มต้นก่อนที่จะตั้งค่าตัวแปร

function DelayedSetVariables(timer)
    let g:ycm_filetype_blacklist['ignored'] = 1
endfunction
let timer=timer_start(500,'DelayedSetVariables')

(ตัวแปรในตัวอย่างคือบัญชีดำจากปลั๊กอิน YouCompleteMe ฉันถือว่าปลั๊กอินเริ่มต้นกระบวนการอื่น ๆ แบบอะซิงโครนัสซึ่งจะสร้างตัวแปร แต่ยังไม่พร้อมเมื่อถึงเวลาเริ่มต้นตัวแปรไม่มีอยู่เมื่อฉันพยายาม ตั้งค่าเป็น. vimrc, ไฟล์หลังหรือเหตุการณ์ VimEnter สิ่งนี้เฉพาะกับระบบ Windows ของฉันเอกสาร YCM ระบุว่า. vimrc ควรใช้งานได้สำหรับการตั้งค่าตัวเลือก)


1

ใส่ในของคุณFindFileCache.vimrc

คำสั่งโหลดอัตโนมัติแตกต่างกันและจะใช้ไม่ได้กับสถานการณ์ของคุณ


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