Halihazırda bash konsolunda parametreye yazılan tekrar nasıl?


23

Sadece satırları boyunca bir şeyler yazıyordum:

mv foo/bar/poit/zoid/narf.txt

ve birden bire farkına varma, kahretsin, bu parametrenin büyük kısımlarını tekrar yazmam gerekiyor

mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt

Tablonun bitmesiyle bile, oldukça acı. Metni ve middleclick'i fare seçerek yapıştırarak parametreyi kopyalayabildiğimi biliyorum ama bu yeterince iyi değil. Klavyede kalmak istiyorum.

Peki klavyeyi kullanarak çizginin geçerli parametresini kopyalamanın bir yolu var mı?


3
Tavsiyem sorunuza cevap vermiyor, ancak küçük bir ipucu. Örnekte olduğu gibi, sonraki inşaatı kullanabilirsiniz: mv foo/bar/poit/zoid/{narf.txt,troz.txt}bunun yerine uzun adresi iki kez yazmak / kopyalamak.
acele

2
Rush'ın çözümü @ biraz daha kısadır: mv foo/bar/poit/zoid/{narf,troz}.txt. Bu, eğer iyi bir şeyimiz olursa, özellikle işe .../zoid/this_source_file_has_to_be_patched.c{,.orig}
yarar

@Rush Bir cevap olarak göstermeye dikkat eder misiniz? Doğrudan istediğim şey olmayabilir, ama sonra yine, çözümün istediğim noktaya göre çok daha fazla. Bir kabul göstergesi hakediyor.
k0pernikus

Yanıtlar:


15

Önceden planlanmış olsaydım ayraç genişletme kullanırım . Bu durumda:

mv foo/bar/poit/zoid/{narf,troz}.txt

Varsayılan readlineklavye kısayollarını kullanan başka bir yaklaşım :

  • mv foo/bar/poit/soid/narf.txt: başla
  • Ctrl- w: unix-word-ruboutsilmek içinfoo/bar/poit/soid/narf.txt
  • Ctrl- y, Space, Ctrl- y: yank, uzay, yanktekrar almak içinmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta- backspace, Meta- backspace: backward-kill-wordsonuncuyu silmek için iki keznarf.txt
  • troz.txt: farklı olan kuyruk kısmını yazın

bashKabuğu kullanarak önemsiz miktarda zaman harcıyorsanız , varsayılan kısayolların bir listesini düzenli aralıklarla okumanızı ve rutininizi öğrenmek ve bunlara dahil etmek için yararlı olabilecek birkaçını seçmenizi tavsiye ederim. El kitabının 8. bölümübash başlamak için iyi bir yer. Kısayolları bilmek, verimliliğinizi gerçekten artırabilir.


Temiz! Benim durumumda Meta + Backspace yerine Alt + Backspace tuşlarına basmak zorunda kaldım.
k0pernikus

3
@ k0pernikus Çoğu klavyede Evet, Alt tuşu Meta tuşudur.
jw013

1
Yeniden yazmayı kaydetmek için .txtCtrl + Left (veya çağıran diğer kısayollar backward-word), ardından bir karakter Sol, sonra Alt + Backspace ve yazabilirsiniz troz.
wjandrea

24

Geçmiş genişlemesi, olay göstergesini kullanarak geçerli komutta da çalışır !#. Bunu, son $yazdığınız argüman kelimesi ile bir araya getirin - - az önce yazdığınız parametreyi elde etmek için. Ve bunun üzerinde tüm düzenli değiştiricileri kullanabilirsiniz, yani, örneğin bir dosyayı uzak bir dizinde yeniden adlandırıyorsanız, sadece şunu yazabilirsiniz:

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname

Çok kullanışlı! Bu, özellikle magic-spacetarih genişlemelerini otomatik olarak genişletmek için bash'ın inputrc seçeneğindeki seçeneği ile iyi çalışır . (En çok oy alan cevabı kullanamadım, çünkü bu genellikle daha faydalı olduğundan eğik çizgileri kırmak için ^ W ayarladım.)
Soren Bjornstad

@SorenBjornstad alt+backspacegenellikle kesik çizgiler gibi sözcük sınırlayıcılarında durur, bu nedenle ^Wbu işlevselliği nasıl elde edeceğinizi değiştirmenize gerek kalmaz , hem sözcük olmayan karakterleri hem de boşlukla ayrılmış sözcükleri silmeniz gerekebilir
Eric Renouf

14

Örnekte olduğu gibi, bir sonraki inşaatı kullanabilirsiniz:

mv foo/bar/poit/zoid/{narf.txt,troz.txt}

veya hatta (önerildiği gibi Ansgar Esztermann ):

mv foo/bar/poit/zoid/{narf,troz}.txt

bunun yerine iki kez uzun adres yazmak / kopyalamak.


2
Buna ayraç genişletme adı verilir .
CodeGnome

6

Oynarken bu işe aldım:

mv foo/bar/poit/zoid/narf.txt

Enter
Son parametreyi saklamak için tuşuna basın .

Şimdi son satırda satır geri almak için kullanın . Bir boşluk girin ve en son kullanılan parametre kullanımını elde etmek için:

Alt + .

Bir hataya neden olmaktan nefret ediyorum, ancak bu kullanımda işi halleder.


Harika, başka bir harika ipucu öğrendim!
Bram

<kbd> Esc </kbd> + <kbd>. </kbd>, <kbd> Alt </kbd> + <kbd>. </kbd> ile aynıdır.
Nikos Alexandris

2

Değişkenleri kolayca kullanabilirsiniz:

a=test.csv ; cp $a $a.bak

Veya sizin durumunuzda (not sekmesi yarışma için bir parça için geçerlidir):

a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt

2

Bu benim içinde var ~/.inputrc:

"\ej":"!#:$\e^"

!#mevcut satır olduğu :$son kelimedir ve \e^bir history-expand-line.


bu cevap olarak işaretlenmelidir. 'Alt / option + j' tuşlarına basmak son sözcüğü kopyalar.
mpprdev

2

Çünkü zsh, aşağıdaki keybindings yararlı buluyorum.

# Bind alt-m to insert previous word from the current line
bindkey '^[m' copy-prev-shell-word

# Bind alt-k to kill word before cursor in vi-style
bindkey '^[k' vi-backward-kill-word

Bu yüzden çarptım Alt- Mson argümanı tekrarlamak için Alt- Kyolun sonundaki parçaları silmek istersem.

İşte haritalayabileceğiniz davranışların bazılarına yararlı bir referans .


2

Kısa etkileşimli iki adımlı çözüm

  1. yazın: echo foo/bar/poit/zoid/narf.txt

    Bu bash - kısayol foo/bar/poit/zoid/narf.txtiçin kullanılabilir hale getirir .Alt.

  2. yazın: mvve isabet Alt- ., Space, Alt-.

    Alacaksın mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt. Şimdi son kelimeyi kolayca değiştirebilirsiniz.

Gece Yarısı Komutanı

(Çok) kullanışlı olabilecek bu araç, konsolda çalışan bir dosya yöneticisidir. Dosya adlarını ve dizin yollarını etkileşimli olarak komut satırına kopyalamanıza olanak tanır. Midnight Commander bu nedenle size farklı dizinlerin içeriğini listeleyen 2 panel (sol ve sağ) gösterir.

Kısa bir rehber:

  • Up/ Downok tuşları, geçerli paneldeki dosyaları seçer.
  • Tab sol ve sağ panel arasında geçiş yapar.
  • Ctrl- Shift- Enterseçili dosyayı komut satırına kopyalar (tam yol dahil)
  • Alt- oSeçili dizini diğer panelde açar.
  • Ctrl- okonsolu tam ekranda görmenizi sağlar
  • Ctrl- x, paktif panelin yolunu konsola kopyalar
  • Ctrl- x, Ctrl- petkin olmayan panelin yolunu konsola kopyalar
  • Esc- Tabotomatik tamamlama

Bu, şu ana kadar bulduğum en hızlı yol - kısayollara alıştıktan sonra.


0

Aynı şeyi {,} "teksir" de kullanın. yani:

git tag -m {v,v}1.0.1

# same as 

git tag -m v1.0.1 v1.0.1
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.