ฉันจะปิดใช้งานพรอมต์“ กด ENTER หรือพิมพ์คำสั่งเพื่อดำเนินการต่อ” ใน Vim ได้อย่างไร


102

มีวิธีใดบ้างในการปิดใช้งานพรอมต์ "กด ENTER หรือพิมพ์คำสั่งเพื่อดำเนินการต่อ" ที่ปรากฏขึ้นหลังจากดำเนินการคำสั่งภายนอก

แก้ไข: พบวิธีแก้ปัญหา: เพิ่มส่วนพิเศษ<CR>ให้กับทางลัดใน. lvimrc ของฉัน

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>

มีความคิดที่ดีกว่านี้ไหม


9
ใน Windows 7 คุณจะได้รับข้อความแจ้งนี้บ่อยครั้งเนื่องจากมีข้อผิดพลาด "ไม่สามารถเปิดไฟล์สลับไฟล์" ที่พิมพ์ออกมา แต่คุณไม่เห็นข้อความเหล่านี้ซึ่งเป็นสาเหตุของการแจ้งเตือน วิธีแก้ปัญหาคือใส่set dir=$TEMPvimrc ของคุณ สิ่งนี้บอกให้กลุ่มใช้โฟลเดอร์ temp ที่ถูกต้องสำหรับไฟล์ temp วิธีนี้จะแก้ไขข้อผิดพลาดและลบข้อความแจ้ง "กด Enter"
Lucas

คำตอบ:


76

ฉันไม่แน่ใจว่าจะทำทั่วโลกได้อย่างไรสำหรับคำสั่งเดียว:

:silent !<command>

อย่าลืมเว้นวรรคหลัง silent


3
น่าเสียดายที่ไม่ค่อยมีประโยชน์สำหรับฉันมันทำให้หน้าจอยุ่งและฉันต้องกด Ctrl-L ... ซึ่งน่ารำคาญยิ่งกว่าการกด Space
Johan Kotlinski

1
ทำงานสำหรับสคริปต์ grep ของฉันแม้ว่า!
Mikko Rantanen

5
สอดคล้องกับผู้แสดงความคิดเห็นด้านล่าง (ผู้แนะนำให้เพิ่ม <CR> พิเศษในตอนท้ายของคำสั่ง) เมื่อใช้แบบเงียบคุณสามารถเพิ่ม <Cl> พิเศษเพื่อที่คุณจะได้ไม่ต้องกดเอง ใช้งานได้ดีกับหน้าจอแล้ว
Victor Farazdagi

4
เพียงใช้คำสั่ง: silent! แล้ว: วาดใหม่! หลังจาก - ฉันคิดว่ามันไม่ได้ทำสิ่งนี้โดยอัตโนมัติเนื่องจากสคริปต์ที่อาจทำสิ่งต่างๆบนหน้าจอที่คุณต้องการอยู่เช่นนาฬิกาหรือสิ่งตรวจสอบสถานะอื่น ๆ ... แค่เดา
osirisgothra

2
อือ .. มันก็เลอะหน้าจอเหมือนกัน :redraw!ตัวเลือกแก้มัน คู่<cr>ก็คงคล้ายกัน และซับซ้อนน้อยลง
alpha_989

57

พบวิธีแก้ปัญหาอย่างหนึ่ง: เพิ่มความพิเศษ<CR> ให้กับคำสั่งแผนที่

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>

2
ไม่เคยคิดเรื่องนี้ แจ่มแน่นอน!
KohányiRóbert

1
ใช่การเพิ่ม <CR> พิเศษในคำสั่งของฉันก็เป็นเคล็ดลับเช่นกัน
Daniel Miessler

2
เรียบง่ายอย่างไม่น่าเชื่อ มีประสิทธิภาพมาก!
Wayne Werner

28
:help hit-enter

1
ฉันสงสัยว่าทำไมมีคนโหวตคำตอบนี้เนื่องจาก:help hit-enterให้ข้อมูลพื้นฐานที่เป็นประโยชน์ในข้อความแจ้ง "กด ENTER ... " สนใจที่จะอธิบาย?
cjs

38
ข้อมูลอะไรจาก ': help hit-enter' ตอบคำถาม? ฉันหาไม่เจอ
Johan Kotlinski

1
เป็นไปได้ว่าคุณจะได้รับพรอมต์ "กด ENTER" จากคำสั่ง write all ก่อนที่จะยกเลิก ข้อมูลภายใต้ <code> shortmess </code> ซึ่งลิงก์ <code> hit-enter </code> จะถูกต้องในกรณีนั้น อย่างไรก็ตามการแจ้งเตือนที่คุณได้รับนั้นมาจากการกะพริบดังนั้นคำแนะนำของ Wergan จึงเป็นคำแนะนำที่ถูกต้อง ดังที่ระบุไว้ใน <code>: help: silent </code> "เมื่อใช้คำสั่งนี้กับคำสั่งภายนอกอาจทำให้หน้าจอเลอะได้ใช้ | CTRL-L | เพื่อล้างข้อมูล" คุณสามารถเพิ่ม: วาดใหม่หรือ Ctrl-L ในคำสั่งของคุณเพื่อแก้ไขปัญหานั้น หรือเพียงแค่ทำสองผลตอบแทนที่คุณทำไปแล้ว
รวบรวมที่ชัดเจน

สำหรับฉันมันเป็นเรื่องเกี่ยวกับset hl( :highlight) ฉันใช้เป็นทางลัดอย่างผิด ๆ ว่าทางลัดhlsearchที่แท้จริงคือhlsใคร sเรื่องเดียว:)

1
@JohanKotlinski theset nomore
Tinmarino

19

ตั้งค่าเป็นcmdheight2 ใน vimrc ของฉัน ( :e $MYVIMRC):

:set cmdheight=2

ข้อมูลเพิ่มเติมที่นี่


1
เหมาะสำหรับข้อความค้นหาที่ยาวมาก
Keith Smiley

18

นี่คือวิธีที่ฉันจัดการกับปัญหาที่เรียกใช้โปรแกรมภายนอกผ่านความเงียบทำให้หน้าจอเป็นกลุ่มโหมดข้อความ (จากประสบการณ์ของฉัน gvim ไม่ประสบปัญหานี้):

command! -nargs=1 Silent
\ | execute ':silent !'.<q-args>
\ | execute ':redraw!'

ใช้แทนคำสั่งเงียบปกติ:

:Silent top

13

อาจเป็นข้อผิดพลาดทางไวยากรณ์ในไฟล์vimrc


5
นี้. ฉันเคยใช้set numberแล้วset syntaxด้านล่างในไฟล์. vimrc ของฉัน เมื่อฉันลบset syntaxVim จะไม่แจ้งให้ฉันทราบอีกต่อไป
piperchester

1
@piperchester นี้ใช้งานได้! พยายามคำแนะนำมากมายและได้ผลเพียงเท่านี้ ขอบคุณ :)
Paul Evans

ฉันอัปเดตกลุ่มแก้ไขปัญหาแล้ว แต่ฉันคิดว่าผู้คนสามารถพิมพ์:messageเพื่อค้นหาว่าเกิดอะไรขึ้น
NanoNova

ใช่. set syntaxฉันมีสาย แทนที่ด้วยset syntax=onและแก้ไขปัญหา
McSuperbX1

7

คำตอบของแอนโธนี่พาฉันไปถูกที่และฉันสามารถกำหนดค่า gvim ไม่ให้หยุดกับข้อความจำนวนมากได้
ฉันเพิ่มการตั้งค่าshortmess=aoOtIในไฟล์ gvimrc ของฉัน มันจะมีการอธิบายในหน้าความช่วยเหลือมาถึงคุณโดย
ตัวอักษรหมายถึงคลาสของข้อความที่คุณไม่ต้องการเห็นหรือต้องการให้ตัดเป็นกลุ่มเพื่อหลีกเลี่ยงการกดเข้าสู่หยุด ฉันจัดการสิ่งนี้มาก่อนโดยการตั้งค่าหน้าต่างเริ่มต้นที่กว้างด้วยใน gvimrc ดังนั้นข้อความเพียงไม่กี่ข้อความจะล้นออกมาและต้องการสิ่งที่น่ารำคาญและเหนื่อยล้าต้องกด Enter :help shortmess

columns=130


6

นี่คือวิธีที่ฉันเรียกใช้คำสั่งภายนอกในสถานการณ์ที่ยุ่งยากโดยไม่ต้อง "กด ENTER" ไม่เหมือน:silentฉันยังคงเห็นผลลัพธ์คำสั่ง

บรรทัดคำสั่ง

:exe ":!<command>" | redraw

สคริปต์ / ฟังก์ชัน

exe ':!<command>' 
redraw

การทำแผนที่ด้วย <expr>

map <expr> <F5> ":exe ':!<command>'\n:redraw\<CR>"

การแมป<expr>ที่เรียกใช้ฟังก์ชัน

map <expr> <F5> MyFoo()
fu! MyFoo()
    return ":exe ':!<command>' | redraw\<CR>"
endf

สามารถใช้ซ้ำได้ด้วยวิธีใด? เมื่อฉันกด F5 มันจะเรียกสตริง<command>
ashrasmun

1
<command>หมายถึงการแทนที่ด้วยคำสั่งภายนอกจริงเช่นmap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

คุณสามารถใช้ได้:

call feedkeys(" ")

ตัวอย่างเช่น:

function! Interactive_Questions()
    echo "Question 1:"
    let response1 = getchar()
    echo "Question 2:"
    let response2 = getchar()

    " Do something

    " Without the next line, you would have to hit ENTER,
    " even if what is written (the questions) has no interest:
    call feedkeys(" ")
endf

ขอบคุณสำหรับคำตอบนี้! ง่ายและรวดเร็วและได้ผลจริงสำหรับกรณีส่วนตัวของฉันซึ่งแตกต่างจากคำตอบอื่น ๆ ในรายการ
ab5tract

3

การวาดใหม่ก่อนการล้างหน้าจอก็ใช้ได้เช่นกัน นี่คือสิ่งที่ฉันมี:

exe 'ls'  
exe 'b4'  "This redraws, so the Prompt is triggered

แต่สิ่งนี้จะไม่ทำให้เกิดการแจ้งเตือน:

exe 'ls'  
redraw  
exe 'b4'

สิ่งนี้ช่วยฉันได้ตั้งแต่ฉันเพียงแค่กำจัดพรอมต์โดยทางโปรแกรมในสถานที่หนึ่ง ๆ ภายในฟังก์ชัน เพียงแค่ออกredrawแก้ไขมัน วิธีแก้ปัญหาอื่นไม่เหมาะสมเนื่องจากฉันต้องการยอมรับการป้อนข้อมูลของผู้ใช้ระหว่างข้อความต้นฉบับและการหายไปของข้อความแจ้ง
Daniel Andersson

1

ฉันมีปัญหาที่คล้ายกัน แต่เมื่อฉันเรียกใช้ argdo เพื่อแทนที่สตริงเดียวกันในหลายไฟล์เช่น

 argdo %s/something/Something/eg|update

ฉันต้องกดหน้าลงเรื่อย ๆ

คุณสามารถตั้งค่าตัวเลือกต่อไปนี้ก่อนที่จะรันสคริปต์เพื่อให้มีเพียงพรอมต์สุดท้ายแทนที่จะเป็นพรอมต์จำนวนมาก

:set nomore

นั่นคือคำตอบ: การ:set nomoreเลียที่ไม่ดีมันยังอยู่ที่จุดสิ้นสุด นอกจากนี้ยังอยู่ใน:h help hit-enter@anthony
Tinmarino

1

ฉันกรณีของฉัน (คำสั่งอัตโนมัติ) set shortmess+=Fทำเคล็ดลับ

: h shortmess
F อย่าให้ข้อมูลไฟล์เมื่อแก้ไขไฟล์เช่น:silent


0

สิ่งนี้เกิดขึ้นกับฉันถ้าฉันบันทึกไฟล์ที่อยู่ในไดเร็กทอรีที่ฉันไม่มีสิทธิ์เขียนลงในไดเร็กทอรี ฉันทำ chmod 777 ในไดเร็กทอรี (ฉันมีสิทธิ์ในการเขียนไฟล์อยู่แล้ว) และข้อความ "กด ENTER" ไม่ปรากฏขึ้นอีกต่อไป


0
  • หากคุณใช้แผนที่สำคัญชีวิตของคุณจะง่ายขึ้นมากโดยการเพิ่มอีกหลายครั้งต่อท้ายคำสั่งของคุณ แต่โดยปกติแล้ว 2 ครั้งก็เพียงพอแล้ว
  • แต่ถ้าคุณกำลังดำเนินการคำสั่งจากบรรทัดคำสั่งกลุ่ม จากนั้นก็เป็นเรื่องยุ่งยาก คุณสามารถเพิ่มคีย์เวิร์ดsilentก่อนออกคำสั่งได้ มันจะนำคุณกลับไปที่หน้าต่าง vim โดยอัตโนมัติหลังจากดำเนินการคำสั่งแล้ว แต่คุณยังต้องดำเนินการด้วยตนเองredrawเนื่องจากบางหน้าต่างเช่น NERD_Tree ต้องวาดใหม่

    • สำหรับกรณีนี้ให้ลองทำตามคำแนะนำจาก vim help doc:

      ในการลดจำนวนการแจ้งให้กดเข้า:

      • ตั้งค่า 'cmdheight' เป็น 2 หรือสูงกว่า
      • เพิ่มแฟล็กใน 'shortmess'
      • รีเซ็ต 'showcmd' และ / หรือ 'ruler'
    • ลิงก์นี้เป็นทางออกอื่น ใส่ลงในไฟล์ vimrc ของคุณ

      คำสั่ง! -nargs = 1 เงียบ
      \ ดำเนินการ 'เงียบ!' .
      \ | ดำเนินการ 'วาดใหม่!'
      

จากนั้นคุณอาจใช้:Silent commandคำสั่งเหมือนคำสั่งทั่วไป


0

ที่ด้านข้างของฉันการแก้ปัญหาคือจะใช้silentบ่อยครั้งมากขึ้นในห่วงโซ่คำสั่ง

โดยเฉพาะก่อนหน้านี้.vimrcมี:

nnoremap M :silent make\|redraw!\|cc<CR>

สิ่งนี้เปลี่ยนเป็น:

nnoremap M :silent make\|silent redraw!\|silent cc<CR>

ก่อนหน้านี้ "กด ENTER" ไม่เคยปรากฏขึ้น แต่บ่อยครั้งที่น่ารำคาญ silents เพิ่มเติมแก้ไขสิ่งนี้ (ดูเหมือนว่าsilentไม่จำเป็นต้องใช้ในredraw!ขณะที่:ccทำให้เกิดการ "กด" ข้อความ.)

การเปลี่ยนแปลงนี้มีข้อเสียคือไม่แสดงผลลัพธ์:ccอีกต่อไปดังนั้นคุณต้องเดาว่าอะไรคือข้อผิดพลาด การปรับแต่งเล็กน้อยแก้ไขสิ่งนี้:

nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>

สิ่งนี้ทำให้รายการข้อผิดพลาด QuickFix (ผลลัพธ์ของmake) ปรากฏขึ้นโดยอัตโนมัติ (และโดย vim-magic จะหายไปหากไม่มีข้อผิดพลาด)

FYI:

แรงจูงใจของการMแมปนี้คือเพียงแค่กดMในโหมดปกติเพื่อ:

  • บันทึกการแก้ไข (เมื่อใช้makeทุกอย่างอยู่ภายใต้การgitควบคุมอยู่ดี)
  • เรียก make
  • และข้ามไปที่ข้อผิดพลาดหรือคำเตือนแรกโดยตรง

Makefileโดยปกติแล้ว s ของฉันจะถูกสร้างขึ้นซึ่งใช้เวลาเพียงเสี้ยววินาที

ด้วยการปรับแต่งเล็กน้อยสิ่งนี้สามารถนำไปใช้กับCปริมาณงานที่ไม่ใช่ประเภทได้เช่นกัน:

ในการ.vimrcเพิ่ม

set efm+=#%t#%f#%l#%c#%m#

สิ่งนี้อนุญาตให้vimตีความข้อความดังต่อไปนี้สำหรับ:cc(แสดงข้อผิดพลาด):

#E#file#line#column#message#
#W#file#line#column#message#
#I#file#line#column#message#

( Errors, Warnings, Info, ขึ้นอยู่กับvimเวทมนตร์)

ตัวอย่างวิธีการใช้สคริปต์นี้หลาม (ขออภัยไม่มีสำเนาที่นี่เป็นคนละเรื่อง)


0

หากข้อผิดพลาดของคุณเกิดจาก E303 การสร้างไดเร็กทอรีชั่วคราวใน.vimrcไฟล์อาจแก้ไขได้

หลังจากเปิดไฟล์ใด ๆ ให้เขียนและป้อน:

:messages

หากมีข้อผิดพลาดจะแจ้ง

หากคุณเห็น E303 (Error303) "ไม่สามารถเปิดไฟล์สลับสำหรับ" {filename} ", ไม่สามารถกู้คืนได้" อาจแสดงว่ามีความพยายามเก่าในการกู้คืนไฟล์ swap (ส่วนใหญ่จะสูญหายหรือไม่มีอยู่จริง) ในระบบ .

ในการแก้ไขปัญหานี้ให้กำหนดไดเร็กทอรีชั่วคราวใน.vimrcไฟล์

ในการค้นหาตำแหน่งของ.vimrcไฟล์ให้พิมพ์และป้อนสิ่งนี้:

$ locate .vimrc
/root/.vimrc

เปิดไฟล์ $ vi .vimrc

ต่อท้ายไฟล์:

set directory=.,$TEMP

บันทึกและปิดด้วย :wq

สุดท้ายโหลดโปรไฟล์ซ้ำด้วย:

$ . /etc/profile

ลองเปิดไฟล์ด้วย VI ปัญหาจะได้รับการแก้ไข


0

เมื่อวันที่gvimถ้าคุณได้ตั้งค่าguioptions+=!(เพิ่ม!ในguioptions) นี้เป็นเพราะการที่ ตัวเลือกนี้ ( !) ทำให้gvimรันคำสั่งบางอย่างบนเทอร์มินัลภายนอก (ซึ่งรองรับคุณสมบัติเพิ่มเติมเช่นสีและอื่น ๆ อีกมากมาย)

คุณสามารถลองใช้:set guioptions-=iและดูว่าเหมาะกับคุณหรือไม่

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