VIM'deki durum değişkenleri


1

VIM'de bir durum değişkenine sahip olmanın bir yolu var mı? Düşünmek:

" Relative line numbers in Normal mode, absolute in Insert mode. Ctrl-N to toggle 
set relativenumber
autocmd InsertEnter * :set number
autocmd InsertLeave * :set relativenumber
inoremap <C-n> <C-o>:call NumberToggle()<cr>
nnoremap <C-n> :call NumberToggle()<cr>
function! NumberToggle()
  if(useRelNums != 1)
    let useRelNums=1
    set number
  else
    let useRelNums=0
    set relativenumber
  endif
endfunc

Tabii ki useRelNumstanımsız. Bu değişkeni NumberToogle()işleve yapılan çağrılar , yani bir durum değişkeni arasında tanımlanmış olarak tutmak istiyorum . Bu nasıl yapılır? Başka bir VIM değişkenini geçici bir çözüm olarak yeniden değerlendirebileceğime eminim ( pastekötü bir örneğin durumu gibi), ancak gerçek bir çözümü tercih ederim.

Teşekkürler.

Yanıtlar:


2

global değişkenleri let g:use_rel_numbersveya ile tanıtabilirsiniz let g:use_rel_numbers=1. yerel değişkenler daha iyi olacağını düşünüyorum - let b:use_rel_numbersörneğin ve setlocal relativenumber.


1

Ayarları istediğiniz durum değişkenleri olarak kullanabilirsiniz ... boolean ve özel. 'sayıyı' açmak, 'göreceli sayıyı' kapatır ve bunun tersi de geçerlidir.

Yani yapabilirsin:

function! ToggleNumbers()
    if &number
        set relativenumber       " was number, now relanum
    elseif &relativenumber
        set norelativenumber     " was relanum, now nothing
    else
        set number               " was nothing, now number
    endif
endfunction

Güzel bir üç durumlu geçiş. (triggle?) (troggle?) {omuz silkme} aramanız ...

VE ... bu sayı / göreceli booleanları da etkilediğinden istediğiniz autocmds ile sorunsuz bir şekilde arayüzlenir ... taa daa!

Triggle'ı severim ...


@epsilon iyi bir noktaya değindi, muhtemelen setlocal ...gerçekten olmalı . Ah ... yazarın değişken kapsam stilini kopyalamıştım ... evet ... ben de öyle yaptım ... evet ... Ama vim yardım sayısının / göreceli sayının pencerede yerel olduğunu belirtiyor. Yine de zarar vermez, kesinlikle onların PER pencereleri / buffer / thingamabob olma niyetini iletmeye yardımcı olur.
lornix

Sağol lornix. Geçerli durumun kullanılması, relativenumberEkleme moduna girerken / çıkarken durum sıfırlandığı için yardımcı olmaz. Bu yüzden daha ayrıntılı bir şeyler yapmaya çalışıyorum.
dotancohen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.