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 zz
sau 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.