ऑपरेटर लंबित मोड में कर्सर का आकार बदलें


9

Gvim में मेरा कर्सर:

मेरे कर्सर Gvim में

दबाने के बाद Gvim में मेरा कर्सर d:

Gvim में मेरा कर्सर <code> d </ code> दबाने के बाद

क्या कोई तरीका है जब मैं ऑपरेटर के लंबित मोड में टर्मिनल विम में कर्सर को बदल सकता हूं? इसे बिल्कुल स्क्रीनशॉट की तरह नहीं देखना है।

यह Gvim के लिए किया जाता o:hor50-Cursorहै guicursor। विम के लिए केवल तीन विकल्प मैं देख रहा हूं:

t_SI    start insert mode (bar cursor shape)        *t_SI* *'t_SI'*
t_SR    start replace mode (underline cursor shape) *t_SR* *'t_SR'*
t_EI    end insert or replace mode (block cursor shape) *t_EI* *'t_EI'*
    |termcap-cursor-shape|

लेकिन ऑपरेटर के पास लंबित मोड के बारे में कुछ नहीं ...


2
मुझे नहीं लगता कि यह संभव है (स्रोत कोड पैच का उपयोग कर सकता है ..)। आंशिक रूप से शुरू किए गए कमांड अक्षरों की जांच करने के लिए मैं जो कुछ भी करता हूं वह विम विंडो के दाईं ओर देखने के लिए है, जो वहां ( showcmdसेटिंग के साथ ) दिखाते हैं । मैं सभी टाइमआउट और esckeysविकल्प को अक्षम करता हूं (यह विम को दुखी रखता है लेकिन मुझे यह सोचने की अनुमति देता है कि मैं उदाहरण के लिए ऑप-पेंडिंग मोड में क्या करना चाहता हूं)।
वैनलेसर

1
@VanLaser हाँ, लेकिन मुझे कर्सर पसंद है ;-)
मार्टिन टूरनोइज


मुझे पता है कि C / C ++, $ इनाम की पेशकश करता है और मैं इसे विम सोर्स कोड में लागू करने की कोशिश कर सकता हूं, यदि संभव हो तो: D
VanLaser

आप लंबित मोड का पता लगाने के लिए vi.stackexchange.com/a/11437/10337 का उपयोग कर सकते हैं और कर्सर को बदलने के लिए एनी एस्केप से गूंज कर सकते हैं।
लाक्षागृह

जवाबों:


3

ऑपरेटर के लंबित मोड में प्रवेश / निकास करते समय यह कर्सर को अपडेट करता है।

हालांकि यह एक हैकी समाधान का एक सा है मुझे नहीं लगता कि इसमें कोई प्रदर्शन समस्याएं हैं।

" This is esentially:
"   exec 'silent !printf "\e[" . a:t . ' q'
"   redraw!
" but without the screen flash
function! s:setCursor(t)
    " Save existing values.
    let [l:title, l:t_ts, l:t_fs, l:titlestring] = [&title, &t_ts, &t_fs, &titlestring]

    try
        let &titleold = ''
        let &t_ts = "\e[0;0"
        let &t_fs = "\e[" . a:t . ' q'
        set title
        set titlestring=H
        redraw!
    finally
        let [&title, &t_ts, &t_fs, &titlestring] = [l:title, l:t_ts, l:t_fs, l:titlestring]
    endtry
endfunction

let s:prevmode = ''
function! DetectPendingMode(timer)
    let l:mode = mode(1)
    if l:mode is# s:prevmode
        return
    endif

    if l:mode is# 'no'
        call <SID>setCursor(4)
    elseif s:prevmode is# 'no'
        call <SID>setCursor(2)
    endif
    let s:prevmode = l:mode
endfunction

call timer_start(250, 'DetectPendingMode', {'repeat': -1})

आपको SetCursor()अपनी पसंद के अनुसार कर्सर की शैली को बदलना पड़ सकता है :

0: blinking block.
1: blinking block.
2: steady block.
3: blinking underline.
4: steady underline.
5: blinking bar (xterm).
6: steady bar (xterm).
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.