Kara delik kaydının ("_) kullanımı nedir?


15

Son zamanlarda "_sadece yazma kaydı olan kara delik kaydını okudum .

Vim belgeleri bunu şu şekilde açıklar:

  1. Kara delik kaydı "_

Bu kayıt defterine yazarken hiçbir şey olmuyor. Bu, normal kayıtları etkilemeden metni silmek için kullanılabilir. Bu kayıttan okurken hiçbir şey döndürülmez.

Okuduğum tüm makale ve kitaplarda yazarlar her zaman aynı örneği kullanırlar.

Bu kullanımı anlıyorum ama bu kaydın diğer kullanım örneklerini bulamam beni şaşırttı, bu da beni 2 soruya götürüyor:

  • Bu kayıt diğer bazı kullanım durumlarında faydalı mıdır ? Evet ise, hangileri?

  • Bu kaydın tek amacı daha önce sözünü ettiğim kullanım durumunda kullanılacaksa , Vim'in yaratıcıları neden bu sorunu böyle bir kayıtla çözmeye karar verdiler ? Demek istediğim bu cevap , soruna, kullanmaktan daha az tuş vuruşu anlamına gelen bir çözüm gösteriyor "_. Kullanmak "0ayrıca kara delik kaydının kullanılmasını da önleyebilir, bu yüzden neden yarattılar?

Yanıtlar:


18

Kara delik kayıtçığı şu durumlarda kullanılır /dev/null: normalde bir şey çıkaran bir eylem yaptığınızda ancak bu çıktı için bir kullanımınız olmadığında.

Vim'in varsayılan davranışı, "silme" değil "kesmektir". Çoğu durumda önemli değildir, ancak bazen kullanıcıların gerçekten "silmesi" gerekebilir. Kara delik sicili burada işe yarar.

Bu kayıt diğer bazı kullanım durumlarında faydalı mıdır?

Kara delik sicili, isimsiz sicili ve numaralandırılmış sicimleri gizlemeden bir şeyler kesmemize izin vermek için burada.

Olası kullanım durumları çoktur, ancak hepsi şaşırtıcı derecede çok benzer:

  • gerçek bir "silme" sağlayın,
  • özellikle isimsiz olan kayıtlar üzerinde daha iyi bir kontrole sahip olmak,
  • numaralı kayıtları sabit bir durumda tutmak,
  • isimsiz sicilden koyma yeteneğini koruyarak bir şeyler kesip bize "tekrarlanabilir koyar"
  • önemsemediğin bir şeyin üzerine bir şey koy
  • komut dosyalarında yan etkileri önlemek…

Birisi "0p"tekrarlanan yüklemeler" senaryosu için kullanılabilir (en yaygın kullanım durumu, dolayısıyla Vim literatüründeki yaygınlığı), ancak bu kayıt "_diğer senaryolar kadar yararlı olmaktan çok uzaktır .


Kullanım durumlarınızı daha çok bu sicilin davranışının sonuçları olarak görüyorum, ancak cevabınız bu sicili `` Kara delik sicili, adlandırılmamış sicili ve numaralandırılmış sicilleri tıkamadan kesmemize izin vermek için burada. '' başka cevaplar bekliyorum ama bu kayıt sadece tek kullanım gibi görünüyor. Cevabınız için çok teşekkür ederim!
statox

5

Metni silmenin yanı sıra, diğer kayıtları silmek için kara delik kaydını da kullanabilirsiniz. Misal:

:let @a=@_

Bu sicili temizlemenin bir yoludur "a.


2
Bunu okuyan herhangi birinin "yaptığım gibi, bunun daha kısa, daha açık bir şekilde değiştirilip değiştirilmediğini merak ediyorum" diye düşünmesi durumunda :call setreg('a', []): pişman olarak, cevap hayır. :call setreg('a', '')( Komutun "açıktısını bırakarak ) gibi davranır:registers
Rich

Bırakarak önemi nedir @Rich "açıkışında :registersdeneyimsiz kullanıcılar için?
Alexej Magura

@AlexejMagura Eğer amacınız kayıt içeriğinizi görüntülerken gördüklerinizi toparlamaksa, bir sürü boş kayıt bırakmak ideal olmayabilir. Silinen bir kayıt ile boş olan mevcut bir kayıt arasında başka bir pratik fark olup olmadığından emin değilim.
Zengin

1

Tek bir fonksiyonda tek pratik kullanım. Feryat işlevinde #sonuca bağlı olarak python yorumu eklenir ve kaldırılır getline('.')[0]. Satır bir yorum içeriyorsa karakter #silinir, ancak bu durumda varsayılan kaydımızla karıştırılmasını istemeyiz.

function! ToggleComment()
    let l:win_view = winsaveview()
    if getline('.')[0] == "#"
        normal! 0"_x
    else
        normal! I#
    endif
    call winrestview(l:win_view)
endfunction
nnoremap <Leader>t :call ToggleComment()<CR>
vnoremap <Leader>t <C-o>:call ToggleComment()<CR>
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.