@Remonn đã nói điều đó trong các nhận xét, nhưng điều đó không rõ ràng đối với tôi. Đây là cách tôi quản lý để xem kết quả:
function! F()
normal! gv
throw mode()
endfunction
vnoremap <F9> <ESC>:call F()<CR>
Chuyển sang chế độ trực quan khác và sau đó nhấn F9
để xem.
Tôi cần ném vì dòng -- VISUAL --
bao gồm bất kỳ thông điệp echo nào. Bất cứ ai có thể echo trong chế độ VISUAL?
Nói chung, tôi nghĩ rằng điều tốt nhất để làm khi bạn sẽ cần mode()
là làm cho hai bản đồ khác nhau, và sau đó, hoặc hai chức năng khác nhau mà làm những việc hoàn toàn khác nhau:
function! Fnorm()
endfunction
function! Fvis()
endfunction
nnoremap <F9> :call Fnorm()<CR>
nnoremap <F9> <ESC>:call Fvis()<CR>gv
hoặc một chức năng duy nhất và cung cấp các thông số khác nhau cho nó tùy thuộc vào ánh xạ:
function! F(param)
endfunction
nnoremap <F9> :call F(1)<CR>
nnoremap <F9> <ESC>:call F(2)<CR>gv
Một mẹo liên quan khác là phải làm gì nếu bạn muốn làm điều gì đó khi đang ở chế độ trực quan, như di chuyển con trỏ. Điều tốt nhất tôi có thể làm là:
function! Fvis()
normal! gv
cursor(1, 1)
endfunction
nnoremap <F9> <ESC>:call Fvis()<CR>gv
Nguồn
2013-11-10 13:09:23
Bạn muốn làm gì nếu Chế độ chặn trực quan đang hoạt động? –
'@Pavan, Nếu Chế độ chặn trực quan đang hoạt động, tôi muốn tính phần bắt đầu kết thúc khối (dòng + cột). Nếu chế độ trực quan đang hoạt động, tôi muốn chỉ tính toán điểm bắt đầu và dòng kết thúc của lựa chọn trực quan, chứ không phải các cột. – Reman
Kiểm tra ': help visualmode()'. – Raimondi