Bạn có thể sử dụng ánh xạ sau:
cnoremap <expr> <CR> getcmdtype() == '/' ? '<CR>zz' : '<CR>'
Điều này có thể được giải thích như thế này:
cnoremap Tạo ánh xạ trong chế độ dòng lệnh
<expr> Ánh xạ sẽ đánh giá một biểu thức (cho phép sử dụng điều kiện)
<CR> Chìa khóa để ánh xạ lại ( Enter)
getcmdtype() Trả về một ký tự cho biết chế độ dòng lệnh nào được sử dụng
== '/' Đã getcmdtype()trả lại /có nghĩa là chúng ta đang ở chế độ tìm kiếm?
'<CR>zz' Nếu chúng ta đang ở chế độ tìm kiếm, hãy thực hiện zzsau khi nhấn<CR>
'<CR>' Khác chỉ thực hiện <CR>
Chủ đề trợ giúp liên quan:
EDIT Lưu ý rằng sẽ rất thú vị khi tạo một ánh xạ hoạt động với cả tìm kiếm tiến và lùi tức là khi getcmdtype()quay lại /hoặc ?. Đây là ánh xạ để làm điều đó:
cnoremap <expr> <CR> (getcmdtype() == '?' \|\| getcmdtype() == '/') ? '<CR>zz' : '<CR>'
Lưu ý việc thoát các |ký tự: nếu chúng không thoát, vim sẽ hiểu cnoremap <expr> <CR> (getcmdtype() == '?'là lệnh đầu tiên được thực thi theo sau getcmdtype() == '/') ? '<CR>zz' : '<CR>'mà không có nghĩa và tạo ra lỗi.
EDIT 2 @Antony đã đề xuất một giải pháp dễ đọc hơn, nhờ anh ấy:
cnoremap <expr> <CR> getcmdtype() =~ '[/?]' ? '<CR>zz' : '<CR>'
getcmdtype() =~ '[?/]'sẽ dễ dàng hơn một chút.