vim ile, eğer kullanırsam
:r!date
vim, tarihi bir sonraki satıra
:r!pwd
çıkış komutunu yeni bir satıra imleç konumu altına nasıl ekleyebilirim?
vim ile, eğer kullanırsam
:r!date
vim, tarihi bir sonraki satıra
:r!pwd
çıkış komutunu yeni bir satıra imleç konumu altına nasıl ekleyebilirim?
Yanıtlar:
" :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>
nmap
Yalnı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.
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
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.0D
tarihi siler, `e
işaretli konuma geri götürür PJx
ve 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 date
bu konuda yardımcı olabilir).
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.)