2010-11-15 12 views
9

Chciałbym, aby użytkownik zadzwonił do mojej funkcji, a następnie miałby funkcję żądania wprowadzenia użytkownika, ale nie chcę, aby użytkownik musiał wpisać " wpisz "po wpisaniu litery zgodnie z wymaganiami funkcji" input() ". Na przykład użytkownik powinien mieć możliwość wpisywania jednoliterowych poleceń, takich jak "h", "j", "k", "l", a każda wpisana litera będzie pętlą wokół mojej funkcji, aż użytkownik wpisze "x" dla wyjścia. Jeśli użyję "input()", wówczas użytkownik będzie musiał wpisać "h <enter>", "j <enter>" ...vim skrypt Funkcja "input()", która nie wymaga, aby użytkownik wpuścił

Jakieś sugestie, w jaki sposób mogę to zrobić?

Jeśli potrzebujesz dodatkowych wyjaśnień, daj mi znać.

UPDATE

Got to działa:

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

bardzo podoba mi się ten kawałek funkcjonalności kodeksu przewiduje. Zasadniczo pozwala utworzyć nowy tryb vim, na przykład można nazwać kod powyżej "tryb okna", podobnie jak tryb wizualny lub tryb wstawiania. Całkiem potężne rzeczy ... – stephenmm

Odpowiedz

8
+0

Cóż, to było łatwe! Dzięki. – stephenmm

+0

@ step (i ktokolwiek inny) - Ciekawi mnie, jak przedstawiasz użytkownikowi monit o dane wejściowe, które można przechwycić za pomocą getchar(). Może jestem gęsty, ale nie wyskakuje na mnie. –

+0

Naprawdę jeszcze go nie wdrożyłem (i dlaczego nie uznałem tego za poprawne), ale z rozglądania się dookoła wygląda na to, że getchar będzie dla mnie działał. Mam nadzieję, że dokonam zmiany, aby wprowadzić ją później wieczorem, więc dam ci znać. – stephenmm

Powiązane problemy