2010-11-15 30 views
9

Tôi muốn người dùng gọi chức năng của tôi và sau đó có chức năng yêu cầu người dùng nhập nhưng tôi không muốn người dùng phải nhập ' nhập 'sau khi nhập một chữ cái theo yêu cầu của hàm "input()". Ví dụ: người dùng có thể nhập các lệnh chữ cái như 'h', 'j', 'k', 'l' và mỗi chữ được gõ sẽ lặp lại chức năng của tôi cho đến khi người dùng nhập 'x' để thoát. Nếu tôi sử dụng "input()" thì người dùng sẽ phải nhập 'h <enter>', 'j <enter>' ...vim script "input()" chức năng không yêu cầu người dùng nhấn enter

Bất kỳ đề xuất nào về cách tôi có thể thực hiện việc này?

Nếu cần làm rõ thêm, vui lòng cho tôi biết.

CẬP NHẬT

Got nó làm việc:

function! s:getchar() 
    let c = getchar() 
    if c =~ '^\d\+$' 
    let c = nr2char(c) 
    endif 
    return c 
endfunction 

" Interactively change the window size 
function! InteractiveWindow() 
    let char = "s" 
    while char =~ '^\w$' 
    echo "(InteractiveWindow) TYPE: h,j,k,l to resize or a for auto resize" 
    let char = s:getchar() 
    if char == "h" | call SetWindowSize("incr" ,-5 ,0) | endif 
    if char == "j" | call SetWindowSize("incr" ,0 ,5) | endif 
    if char == "k" | call SetWindowSize("incr" ,0 ,-5) | endif 
    if char == "l" | call SetWindowSize("incr" ,5 ,0) | endif 
    if char == "a" | call SetWindowSize("abs" ,0 ,0) | endif 
    redraw 
    endwhile 
endfunction 
+0

Tôi thực sự thích các chức năng chút mã này cung cấp. Về cơ bản nó cho phép bạn tạo một chế độ vim mới, ví dụ bạn có thể gọi mã ở trên một "chế độ cửa sổ" giống như chế độ trực quan hoặc chế độ chèn. Công cụ khá mạnh ... – stephenmm

Trả lời

8
+0

Điều đó thật dễ dàng! Cảm ơn. – stephenmm

+0

@stephen (và bất kỳ ai khác) - Tôi tò mò làm thế nào bạn đang trình bày các dấu nhắc cho người dùng cho đầu vào có thể được bắt với getchar(). Có lẽ tôi dày đặc nhưng nó không nhảy ra khỏi tôi. –

+0

Tôi thực sự đã không thực hiện nó được nêu ra (và tại sao tôi đã không đánh dấu nó là đúng chưa) nhưng nhìn xung quanh nó có vẻ như getchar sẽ làm việc cho tôi. Tôi hy vọng sẽ có một sự thay đổi để thực hiện nó tối nay, vì vậy tôi sẽ cho bạn biết. – stephenmm

Các vấn đề liên quan