Vim'den bash betiğini yürüt


21

Bh komut dosyası yazmak için vim kullanıyorum. şey, bazen yeni bir dosya oluşturmak, yürütülebilir hale getirmek, yürütmek ve sonra kaldırmak istemiyorum. Yani sadece bir kez kullanılacak senaryolar.

Örneğin ben vim açın ve şunu yazın:

#!/bin/bash

ll | while read line
do
    echo $line
done

Bu dosyayı kaydetmedim, sadece bash komut dosyasını basitleştirmek için vim kullanıyorum. !Vim yoluyla bash komutu yürütebileceğimi biliyorum . Peki, arabellekteki her şeyi yürütmeye ne dersiniz?


4
Vim'deki mevcut komut satırını ile düzenleyebileceğinizi <C-x><C-e>ve yazma sırasında çalıştırabileceğinizi biliyorsunuz, değil mi?
romainl

Bu seçenekle bash çalıştırırsanız, vi'de komut satırını düzenlemek için set -o vituşuna basabilirsiniz Esc-v. Sonra Esc-:wqyürütmek.
roblogic

Yanıtlar:


35

Yığın taşması üzerine bu konuda oldukça kapsamlı bir cevap yazdım . Temel fikir yazma komutu hakkındadır beri olmasıdır yazma değil tasarruf , bu tür piton veya Bash gibi bir dış programa tampon metin yazabilirsiniz. Sizin durumunuzda, aşağıdaki gibi bir şey yapmak istersiniz:

:w !bash

veya

:w !sh

Bu komutlar kelimenin tam anlamıyla tamponunuzdaki metni doğrudan belirttiğiniz programa yazar !, bu da uygundur, çünkü daha sonra bir dosyayı kaydetmeniz gerekmez. Tabii ki, şöyle de yapabilirsiniz:

:w | !bash %

bu da dosyanızı kaydeder ve daha sonra bir bash betiği olarak çalıştırır. Hangisinin sizin için daha anlamlı olduğunu seçebilirsiniz.


Seçeneklere bu şekilde bir argüman sunmanın bir yolu var mı? Denedim :w !bash -a testama "ikili dosya yürütülemiyor" var
St.Antario

@ St.Antario Hmm. Eminim bir şekilde olmalı, ama benim bash oldukça paslı (çoğunlukla windows kullanın). Cygwin'de boş bir testdosyayla denediğimde, benim için iyi çalışıyor. Komut ne yapmalı ve ne testiçermelidir?
DJMcMayhem

Gerçek durumum oldukça karmaşık, bu yüzden sadece aktarılan argümanı yazdırmasına izin verin. BTW, ne test içermesi gerekir ? testsadece bir argüman -a.
St.Antario

1
@ St.Antario Oh, tamam anladım. testBir dosya olması gerektiğini düşündüm . Ne yapacağımdan emin değilim. Karmaşık bir şey deniyorsanız, onu bir dosyaya kaydetmek daha iyi olabilir. Daha fazla ayrıntı verebilmek için ayrı bir soru sormaya değer olabilir. Muhtemelen Unix ve Linux
DJMcMayhem

4

Senaryo: bash kabuğunda çalışıyorsunuz. İlk olarak, yerel düzenleme modunun vi olduğundan emin olun:

$ set -o vi

Şimdi, kendinizi aşağıdaki gibi uzun bir komut üzerinde çalışırken bulduğunuzda Esc+ tuşuna basın v.

$ fjhwfq this is my long command

Bu, komutunuzu geçici bir vioturuma yükleyecektir . Şimdi istediğiniz gibi düzenleyebilir ve hatta başka bir komut ekleyebilirsiniz ...

fjhwfq some long command
ls -l

Düzenlemeyi bitirdiğinizde, yazın Esc :wqve komutlar yürütülür, örneğin:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
Escanahtarsız yeni bir
macbook'unuz

1
Yeni MacBook'larda Escanahtar yok !? O zaman Vim'i nasıl kullanabilirler?
Hubro

1
Şimdi denedim, yeni macbook touchbar thingy , Vim'i Escbir terminalde çalıştırırken bir anahtar gösteriyor .
Roblogic
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.