Làm cách nào để tắt lời nhắc “Nhấn ENTER hoặc gõ lệnh để tiếp tục” trong Vim?


102

Có cách nào để vô hiệu hóa lời nhắc "Nhấn ENTER hoặc gõ lệnh để tiếp tục" xuất hiện sau khi thực hiện lệnh bên ngoài không?

CHỈNH SỬA: Đã tìm thấy một giải pháp: Thêm phần bổ sung <CR>vào phím tắt trong .lvimrc của tôi.

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

Bất kỳ ý tưởng tốt hơn?


9
Trên Windows 7, bạn sẽ nhận được lời nhắc này thường xuyên do lỗi "không thể mở tệp hoán đổi" đã được in nhưng bạn không thấy chúng, điều này gây ra lời nhắc. Giải pháp là đưa set dir=$TEMPvào vimrc của bạn. Điều này cho vim biết sử dụng đúng thư mục tạm thời cho các tệp tạm thời của nó. Điều này lần lượt sửa chữa các lỗi và loại bỏ lời nhắc "nhấn enter".
Lucas

Câu trả lời:


76

Tôi không chắc làm thế nào để thực hiện nó trên toàn cầu mặc dù đối với một lệnh:

:silent !<command>

Đảm bảo bao gồm một khoảng trắng sau silent


3
Thật không may, nó không hữu ích cho tôi, nó làm rối màn hình và tôi phải nhấn Ctrl-L ... điều này thậm chí còn khó chịu hơn nhấn khoảng trắng.
Johan Kotlinski

1
Đã làm việc cho tập lệnh grep của tôi!
Mikko Rantanen 23/07/09

5
Theo người bình luận bên dưới (người đã đề xuất thêm <CR> vào cuối lệnh), khi sử dụng im lặng, bạn có thể thêm <Cl> bổ sung, để không phải nhấn thủ công. Sau đó, hoạt động tốt với màn hình.
Victor Farazdagi

4
chỉ cần sử dụng lệnh: silent! và sau đó: redraw! sau - tôi nghĩ rằng nó không làm điều này tự động vì kịch bản mà có thể làm những việc để màn hình mà bạn muốn nghỉ, ví dụ, một chiếc đồng hồ hay một số tình trạng khác giám sát điều ... chỉ là một dự đoán
osirisgothra

2
Yeah .. nó cũng làm rối màn hình cho tôi. các :redraw!tùy chọn giải quyết nó. Đôi <cr>có lẽ tương tự. và ít phức tạp hơn
alpha_989

57

Đã tìm ra một cách giải quyết: Thêm phần bổ sung <CR> vào lệnh bản đồ.

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

2
Không bao giờ có thể nghĩ đến điều này. Hoàn toàn rực rỡ!
Kohányi Róbert

1
Đúng vậy, việc thêm <CR> bổ sung vào lệnh của tôi cũng đã thành công.
Daniel Miessler 9/12/12

2
Đơn giản vô cùng. Nó siêu hiệu quả!
Wayne Werner

28
:help hit-enter

1
Tôi tò mò không biết tại sao ai đó lại bỏ phiếu cho câu trả lời này, vì nó :help hit-entercung cấp một số thông tin cơ bản khá hữu ích về lời nhắc "Nhấn ENTER ...". Quan tâm để giải thích?
cjs

38
Thông tin nào từ ': help hit-enter' trả lời câu hỏi? Tôi không thể tìm thấy nó.
Johan Kotlinski

1
Có thể bạn sẽ nhận được lời nhắc "Nhấn ENTER" từ lệnh ghi tất cả trước khi bạn thoát ra. Thông tin trong <code> shortmess </code> mà <code> hit-enter </code> liên kết đến là hợp lệ trong trường hợp đó. Tuy nhiên, lời nhắc bạn nhận được là từ việc bắn ra, vì vậy đề xuất của Wergan là một trong những chính xác. Như đã lưu ý trong <code>: help: silent </code> "Khi sử dụng điều này cho một lệnh bên ngoài, điều này có thể khiến màn hình bị rối. Sử dụng | CTRL-L | để dọn dẹp". Bạn có thể thêm: vẽ lại hoặc Ctrl-L vào lệnh của mình để khắc phục điều đó. Hoặc chỉ làm hai lần trả lại mà bạn đã làm.
Trình biên dịch dễ thấy vào

Đối với tôi, đó là về set hl( :highlight) tôi đã sử dụng sai làm phím tắt cho hlsearchai là phím tắt thực sự hls. Một svấn đề :)

1
@JohanKotlinski theset nomore
Tinmarino

19

Đặt cmdheightthành 2, trong vimrc ( :e $MYVIMRC) của tôi :

:set cmdheight=2

Thêm thông tin ở đây .


1
Đây là hoàn hảo cho rất dài các truy vấn tìm kiếm
Keith Smiley

18

Đây là cách tôi xử lý vấn đề chạy chương trình bên ngoài thông qua chế độ im lặng làm rối màn hình ở chế độ văn bản vim (theo kinh nghiệm của tôi, gvim không bị vấn đề này):

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

Sử dụng nó thay vì lệnh im lặng thông thường:

:Silent top

13

Nó có thể là một lỗi cú pháp trong tệp vimrc


5
Điều này. Tôi đã sử dụng set numbervà sau đó set syntaxngay bên dưới trong tệp .vimrc của tôi. Sau khi tôi loại bỏ set syntaxVim không còn nhắc nhở tôi nữa.
piperchester

1
@piperchester điều này đã hoạt động! Đã thử rất nhiều đề xuất và chỉ điều này mới hoạt động. Cảm ơn :)
Paul Evans

Tôi cập nhật vim, vấn đề đã được giải quyết. Nhưng tôi nghĩ mọi người có thể gõ :messageđể tìm hiểu điều gì đang xảy ra.
NanoNova

Vâng. Tôi đã có dòng set syntax. Đã thay thế nó bằng set syntax=onvà nó khắc phục được sự cố.
McSuperbX1

7

Câu trả lời của anthony đã đưa tôi đến đúng nơi và tôi có thể định cấu hình gvim để không dừng lại trên nhiều tin nhắn.
Tôi đã thêm bộ shortmess=aoOtIvào tệp gvimrc của mình.
Nó được giải thích trong trang trợ giúp mang đến cho bạn :help shortmess.
Các chữ cái có nghĩa là các lớp thư bạn không muốn xem hoặc muốn vim cắt bớt để tránh nhấn enter dừng lại.
Tôi đã quản lý điều này trước đây bằng cách đặt một cửa sổ ban đầu rộng columns=130trong gvimrc để một số thông báo sẽ tràn nó và yêu cầu bạn phải nhấn enter.


6

Đây là cách tôi chạy các lệnh bên ngoài trong các tình huống phức tạp mà không cần "Nhấn ENTER". Không giống như :silent, tôi vẫn có thể thấy đầu ra lệnh.

Dòng lệnh

:exe ":!<command>" | redraw

Tập lệnh / chức năng

exe ':!<command>' 
redraw

Lập bản đồ với <expr>

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

Ánh xạ với <expr>điều đó gọi một hàm

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

Cái này có thể tái sử dụng theo bất kỳ cách nào không? Khi tôi nhấn F5, nó chỉ gọi một chuỗi<command>
ashrasmun

1
<command>được thay thế bằng một lệnh bên ngoài thực tế, ví dụmap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

Bạn có thể dùng:

call feedkeys(" ")

Ví dụ:

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

Cảm ơn câu trả lời này! Nhanh chóng, dễ dàng và thực sự hiệu quả cho trường hợp cá nhân của tôi không giống như nhiều câu trả lời khác được liệt kê.
ab5tract

3

Vẽ lại trước khi màn hình rõ ràng cũng hoạt động. Đây là những gì tôi đã có:

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

Nhưng điều này sẽ không kích hoạt lời nhắc:

exe 'ls'  
redraw  
exe 'b4'

Điều này đã giúp tôi vì tôi chỉ cần lập trình loại bỏ lời nhắc ở một vị trí nhất định trong một hàm. Chỉ cần phát hành một redrawgiải quyết nó. Giải pháp khác không phù hợp, vì tôi muốn chấp nhận thông tin người dùng nhập vào giữa tin nhắn ban đầu và sự biến mất của lời nhắc.
Daniel Andersson

1

Tôi gặp sự cố tương tự, nhưng khi tôi chạy một argdo để thay thế cùng một chuỗi trong nhiều tệp, ví dụ:

 argdo %s/something/Something/eg|update

Tôi liên tục phải nhấn trang xuống.

Bạn có thể đặt tùy chọn sau trước khi chạy tập lệnh để chỉ có lời nhắc cuối cùng thay vì nhiều lời nhắc

:set nomore

Đó là câu trả lời: :set nomorecuối cùng thì nó vẫn còn đó. Nó cũng ở trong :h help hit-enter@anthony
Tinmarino

1

Tôi trường hợp của tôi (một lệnh tự động) set shortmess+=Fđã thực hiện thủ thuật.

: h shortmess
F không cung cấp thông tin tệp khi chỉnh sửa tệp, như:silent


0

Điều này xảy ra với tôi nếu tôi đang lưu tệp trong thư mục mà tôi không có quyền ghi vào thư mục. Tôi đã thực hiện chmod 777 trên thư mục (tôi đã có quyền ghi trên chính tệp đó) và thông báo "Nhấn ENTER" không còn hiển thị nữa.


0
  • Nếu bạn đang sử dụng một key map thì cuộc sống của bạn có thể dễ dàng hơn nhiều bằng cách thêm một số thứ nữa vào cuối lệnh của bạn - nhưng thường thì 2 lần là đủ.
  • Nhưng nếu bạn đang thực hiện một lệnh từ dòng lệnh vim. Sau đó, nó là loại khó khăn. Bạn có thể thêm từ khóa silenttrước lệnh thực sự của mình. Nó sẽ tự động đưa bạn trở lại cửa sổ vim sau khi lệnh được thực thi. Nhưng bạn vẫn cần phải thực thi theo cách thủ công redrawvì một số cửa sổ như NERD_Tree cần được vẽ lại.

    • Đối với trường hợp này, hãy thử làm theo hướng dẫn từ tài liệu trợ giúp vim:

      Để giảm số lượng lời nhắc nhấn-nhập:

      • Đặt 'cmdheight' thành 2 hoặc cao hơn.
      • Thêm cờ vào 'shortmess'.
      • Đặt lại 'showcmd' và / hoặc 'thước kẻ'.
    • Liên kết này cung cấp một lối thoát khác. Đặt cái này vào tệp vimrc của bạn

      chỉ huy! -nargs = 1 Im lặng
      \ thực hiện 'im lặng!' .
      \ | thực hiện 'vẽ lại!'
      

Và sau đó bạn có thể sử dụng :Silent commandnhư một lệnh thông thường.


0

Về phía tôi, giải pháp là sử dụng silentthường xuyên hơn trong chuỗi lệnh .

Cụ thể trước đây, .vimrccó:

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

Điều này đã được thay đổi thành:

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

Trước đây, "Nhấn ENTER" không phải lúc nào cũng hiển thị, nhưng thường xuyên gây khó chịu. Các bổ sung silentđã sửa điều này. (Có vẻ như silentkhông cần bật redraw!:ccđã gây ra thông báo "Nhấn ENTER".)

Thay đổi này có nhược điểm là không hiển thị đầu ra nữa :cc, vì vậy bạn phải đoán lỗi là gì. Một chút chỉnh sửa sẽ khắc phục điều này:

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

Điều này làm cho danh sách QuickFix lỗi (Đầu ra của make) tự động xuất hiện (và, bằng vim-magic, biến mất nếu không có lỗi).

FYI:

Động cơ của việc Mánh xạ này là chỉ cần nhấn Mở Chế độ bình thường để:

  • lưu bản chỉnh sửa (khi sử dụng makemọi thứ vẫn dưới sự gitkiểm soát)
  • cầu khẩn make
  • và chuyển trực tiếp đến lỗi hoặc cảnh báo đầu tiên

Của tôi Makefilethường được xây dựng như vậy, điều này chỉ mất một phần của giây.

Với một chút tinh chỉnh, điều này cũng có thể được áp dụng cho các Ckhối lượng công việc không thuộc loại:

trong .vimrcadd

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

Điều này cho phép vimgiải thích các thông báo như sau cho :cc(lỗi hiển thị):

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

( Errors, Warnings, Info, dựa trên vimphép thuật)

Ví dụ về cách sử dụng điều này cho các tập lệnh Python . (Xin lỗi, không có bản sao ở đây, đó là một câu chuyện khác.)


0

Nếu lỗi của bạn là do E303, thì việc tạo thư mục tạm thời trong .vimrctệp có thể khắc phục được lỗi đó.

Sau khi mở bất kỳ tệp nào, hãy viết và nhập:

:messages

Nếu có lỗi nó sẽ nhắc nhở.

Nếu bạn thấy E303 (Error303) "Không thể mở tệp hoán đổi cho" {filename} ", không thể khôi phục", điều đó có thể cho thấy rằng có một nỗ lực cũ để khôi phục tệp hoán đổi (rất có thể bị mất hoặc không tồn tại) trong hệ thống .

Để khắc phục điều này, hãy chỉ định một thư mục tạm thời trong .vimrctệp.

Để tìm vị trí của .vimrctệp, hãy nhập và nhập sau:

$ locate .vimrc
/root/.vimrc

Mở tập tin $ vi .vimrc

Nối phần này vào cuối tệp:

set directory=.,$TEMP

Lưu và đóng bằng :wq

Cuối cùng, tải lại hồ sơ với:

$ . /etc/profile

Cố gắng mở bất kỳ tệp nào bằng VI. Sự cố sẽ được khắc phục.


0

Bật gvim, nếu bạn đã đặt guioptions+=!(Đã thêm !vào guioptions), điều này là do đó. Tùy chọn này ( !) thực gvimhiện một số lệnh trên thiết bị đầu cuối bên ngoài (hỗ trợ nhiều tính năng hơn, như màu sắc và nhiều lệnh khác).

Bạn có thể thử nó bằng cách sử dụng :set guioptions-=ivà xem liệu điều này có phù hợp với bạn không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.