vim r! imleç konumunda


Yanıtlar:


16

" :read" İle Vim çıkışı daima yeni bir satıra ekleyecektir. Çözüm maalesef basit değil.

Ekleme modundayken geçerli tuşa basarak komutun çıktısını tuşuna basıp ControlRyazabilirsiniz =system('command')Enter. Ne yazık ki, komutun çıktısında da eklenecek bir son satır (en çok olduğu gibi) varsa, satırınız kesilir.

Bu, substitute()sondaki satırları soymak için bir çağrı ekleyerek düzeltilebilir , ancak komutu el ile yazmaya değer olduğundan daha fazla sorun haline getirir.

Nihai çözüm, bir tür harita oluşturmaktır, ancak Vim'in "ileriye dönük" olarak adlandırdığı şeyi nasıl ele aldığından daha da karmaşık hale gelir; bunun gibi bir şey yapabilirsiniz:

:nmap \e i<c-r>=substitute(system('date'),'[\r\n]*$','','')<cr><esc>

Komutun eşlemede "sabit kablolu" olduğu yerlerde aşağıdaki gibi bir şey yapamazsınız:

:nmap \e i<c-r>=substitute(system(input('Command: ')),'[\r\n]*$','','')<cr><esc>

Kullanıcıdan komutun çalıştırılmasını istemeye çalıştığınız yerde, çünkü Vim karışacak, bip sesi çıkaracak ve ekleme moduna girecektir.

Bu nedenle, önce komutun çalışmasını istemeniz, bir değişkende saklamanız ve ardından işlenen çıktıyı eklemeniz gerekir. Bu noktada, haritanın yönetilemez derecede dağınık olmasını önlemek için muhtemelen bir yardımcı fonksiyona ihtiyaç vardır, bu yüzden böyle bir şeyle sonuçlanırız:

function InlineCommand()
    let l:cmd = input('Command: ')
    let l:output = system(l:cmd)
    let l:output = substitute(l:output, '[\r\n]*$', '', '')
    execute 'normal i' . l:output
endfunction

nmap <silent> \e :call InlineCommand()<CR>

nmapYalnızca normal modda yazıldığında yürütülen eşlemeler oluşturduğunu unutmayın .

Bu arada, yalnızca tarihi veya geçerli çalışma dizinini eklemek istiyorsanız, verdiğim ilk yanıt mümkündür. Sadece ekleme modunu girin ve ControlR=strftime('%c')Enterveya yazın ControlR=getcwd()Enter.


Bunu çözmek için komutları zincirlemek mümkün mü? : r! tarih | : - | J veya i \ n \ n ^ [-:.! Tarih \ n -JJ
Alexx Roche

4

Geçerli satırda olmasını istiyorsanız, sadece denersiniz, ancak satırın eski içeriğinin silineceğini unutmayın:

:.!date

Tam imleç konumunu istiyorsanız şunları yapabilirsiniz:

:let a=system("date") | let b=substitute(a,"[\r\n]*$","","g") | exec 'normal i'.b

Uzun lafın kısası: .s / \% x00 // g ile de değiştirebileceğiniz ^ @ (boş karakterler) kurtulmak istediğiniz nedeni değiştirmeniz gerekir. Bu, daha az borulu daha kısa bir versiyondur:

:exec 'normal i'.substitute(system("date"),"[\n]*$","","")

Ayrıca, aynı satırdaki çeşitli noktalarda değiştirmek istiyorsanız etiketleri de ayarlayabilirsiniz:

Bu Satır 1 verildiğinde:

1 Date: <datehere> and also <datehere>

Yürütme:

:let a=system("date") | exec ".s/<datehere>/".a."/g" | .s/\%x00//g

Değiştirdikten Sonra:

1 Date: jue ago 9 02:34:52 ART 2012 and also jue ago 9 02:34:52 ART 2012

Vim 7.2'de test edildi


1

Bu tür şeyleri .vimrc'nize ekleyebilirsiniz:

" Insert the date in YYYY-MM-DD format inline just before cursor position (normal mode)
nnoremap <Leader>di me:r !date +\%F<CR>A <Esc>0D`ePJx
  • me geçerli konumu işaretler.
  • :r !date +\%F<CR>YYYY-AA-GG formatında sonraki satırda koyar tarih (sadece her kaçış, ancak sizin gibi değiştirebilirsiniz %ile \).
  • A <Esc> tarih çıkışının sonuna bir boşluk ekler.
  • 0Dtarihi siler, `eişaretli konuma geri götürür PJxve imleçten önceki tarihi getirir, satırları birleştirir (aşağıdaki boş alandan kurtulmak için) ve sondaki alanı öldürür. Uygun gördüğünüz şekilde eşlemeyi değiştirin.

Ekleme modundan yapmak istiyorsanız, bugün bu cevheri https://vimways.org/2018/the-mapping-business/ adresinde okuyorum.

inoremap <C-g><C-t> <C-r>=strftime("%F")<CR>

Tarih çıktısını ihtiyaçlarınıza göre değiştirebilirsiniz ( man datebu konuda yardımcı olabilir).


0

Normal modda (kaçış / uyku modunda) yapıştırın

:exec 'normal i'.system("date \| tr '\n' ' '")

geçerli konuma eklenen tarihi almak için. Bu satırı bir satır başı ile kopyalarsanız Shift + Ekle, DateTime-Here komutunuz olur.

Ek olarak, F12 tuşunu kullanarak bir komuta

:inoremap <F12> <C-r>=system("date \| tr '\n' ' '")<CR>

ekleme modu etkinken İşlev-tuşu-12 ile tarih ekleyebilirsiniz. kullanırım

:inoremap DHRE <C-r>=system("date \| tr '\n' ' '")<CR>

(ADHERE yapışmasının tetiklendiğini bulduktan sonra DHERE'den değiştim) çünkü başka şeyler için zaten F12 kullanıyorum.

kullanırım

grep -iE "dhere" /usr/share/dict/words

Kullanmak için nispeten güvenli olduğunuzu gösteren mevcut kelimelerle belirgin çatışmalar olup olmadığını kontrol etmek için:

:inoremap PWD <C-r>=system("pwd \| tr '\n' ' '")<CR>

(belirli belgeler yazmıyorsanız.)

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.