Apakah ada cara untuk mendapatkan bash untuk memiliki sintaks seperti ikan?

41

Dalam shell ikan , baris perintah aktual disorot sintaks:

masukkan deskripsi gambar di sini

Apakah ada cara untuk mendapatkan perilaku yang sama di bash?

Ada sesuatu seperti ini tetapi untuk zsh, bukan bash. Apakah mungkin ini bisa diangkut ke bash?

Untuk memperjelas bagi mereka yang tidak mengerti tangkapan layar, penjelasan, atau tautan yang disediakan: Saya ingin menyorot teks aktual yang dimasukkan di terminal. Perintah, tanda kurung, kutipan, dll.

Wuffers
sumber
Jangan berpikir bash menerima plugin seperti halnya zsh, jadi itu mungkin memerlukan custom build dari bash shell / binary. Adakah alasan untuk tidak menggunakan ikan saja? Juga, terima kasih telah mengarahkan saya ke shell lain untuk bermain-main dan melihat apakah saya dapat mempelajari beberapa fitur canggih haha.
Matrix Mole
1
@ Matrix: Saya tidak bisa menggunakan ikan karena saya memiliki konfigurasi bash yang sangat kompleks yang saya tidak bisa menyerah.
Wuffers
Sayangnya, saya tidak berpikir bahwa saat ini mungkin dalam bash. Saya yakin penelitian yang Anda lakukan juga menunjukkan hal itu. Jika Anda benar-benar tidak dapat beralih ke zsh, maka itu dapat dimengerti, tetapi jika tidak, Anda mungkin ingin melihat fizsh yang menggabungkan beberapa fitur mirip ikan ke zsh, meskipun belum diperbarui sejak Februari, jadi mungkin tautan zsh-syntax-highlighting yang Anda berikan akan lebih kuat.
voithos
1
Ini akan sangat bermanfaat untuk belajar bash, karena memungkinkan untuk bermain-main dengan cara yang sangat berbeda. Hanya dengan mudah melihat bahwa Anda lupa melarikan diri karakter spesial akan sangat berharga.
Sirap

Jawaban:

8

Bash menggunakan readlineuntuk input interaktif, jadi penyorotan sintaks perlu diimplementasikan dalam program itu. Saya menemukan diskusi Grup Google tentang cara membuat kode fitur seperti itu.

Kerang ikan menggunakan editor baris sendiri yang khusus untuk program itu, dan tidak bisa langsung diangkut.

Anda mungkin menemukan bahwa zshini sangat mirip dengan bash, dan editor barisnya dapat diperpanjang . Saya menemukan zsh-syntax-highlighting untuk mengaktifkan fitur ini di zsh.

razzintown
sumber
1

Tidak ada cara sederhana untuk mendapatkan penyorotan sintaks di GNU Bash (atau GNU Readline), tetapi pada prinsipnya memungkinkan untuk mengimplementasikan editor baris Anda sendiri dalam skrip Bash dengan mengikat semua input pengguna ke fungsi shell menggunakan perintah builtin bind -x 'BYTE: SHELL-COMMAND'. Tentu saja mungkin untuk mengintegrasikan fitur penyorotan sintaks di editor baris Anda sendiri.

Sebenarnya saya menerapkan editor baris ble.shdengan fitur-fitur seperti penyorotan sintaksis dan saran otomatis. Ini mendukung Bash 3.0--5.0. Karena ini ditulis dalam (hampir) skrip Bash murni, Anda dapat sourcememasukkan skrip tersebut ~/.bashrc. Berikut ini contoh untuk disiapkan ble.shdi bashrc (lihat README untuk detailnya):

$ git clone https://github.com/akinomyoga/ble.sh.git
$ cd ble.sh
$ make
$ make INSDIR="$HOME/.local/share/blesh" install
# bashrc

# Add the following line at the beginning of bashrc
[[ $- == *i* ]] &&
  source "$HOME/.local/share/blesh/ble.sh" --attach=none

# ... other bashrc settings ...

# Add the following line at the end of bashrc
((_ble_bash)) && ble-attach

Catatan : Saya tahu bahwa kadang-kadang menjawab pertanyaan dengan tautan ke produk sendiri dianggap promosi diri dan tidak dapat dipilih, jadi saya menahan diri untuk tidak menjawab pertanyaan ini. Namun, tidak ada solusi lain yang tidak muncul lama, dan juga pertanyaan ini memiliki banyak pandangan (yang mencerminkan permintaannya yang signifikan). Jadi saya memutuskan untuk menjawab pertanyaan ini hari ini. Merujuk pada pertanyaan / jawaban meta berikut ini, saya menggambarkan ide itu pertama dan selanjutnya memberikan tautan ke proyek saya sebagai contoh implementasi.

Ya, saya harus mengakui bahwa ini sebenarnya promosi diri , tetapi saya percaya ini membantu orang yang menginginkan fitur tersebut. Jika ada masalah, saya akan sangat menghargai jika Anda bisa memberi tahu saya dengan komentar.

akinomyoga
sumber
-1

Saya tidak berpikir sintaks harus terjadi pada tingkat shell tetapi pada tingkat antarmuka (hanya pendapat saya -dan orang lain yang itu seems-), jadi saya akan melihat ke dalam "plugin" untuk Terminal atau konsol favorit Anda, misalnya plug in untuk Kate mungkin membantu, atau yang lain ini yang menawarkan highlight sintaks di nano

Berikut ini masih banyak pembicaraan tentang cara menyinkronkan penyorotan di Terminal:

Tambahkan alias ls = 'ls -G' ke .bash_profile.

meskipun di sini lebih baik dijelaskan bagaimana caranya

Semoga ini bisa membantu

Purefan
sumber
11
Sepertinya Anda menjawab cara mengatur penyorotan sintaks di editor, bukan di shell. Ls-colorization bahkan bukan "syntax" highlighting.
Kyle Strand
Saya pikir Anda berfokus pada semantik lebih dari pada solusi, dengan kode dari tautan dan solusi yang disarankan, saya mendapatkan warna dalam bash, yang saya percaya adalah apa yang ingin diketahui OP
Purefan
10
Pertanyaan aslinya sebenarnya cukup jelas tentang penyorotan sintaksis yang sebenarnya. Ini ditunjukkan oleh tangkapan layar cangkang ikan dan kalimat terakhir: "Saya ingin menyorot teks aktual yang dimasukkan di terminal. Perintah, tanda kurung, tanda kutip, dll."
Kyle Strand
9
Seperti yang saya katakan, ini bukan highlight "sintaks". Itu menyoroti output dari lsperintah berdasarkan pada tipe file, yang tidak ada hubungannya dengan sintaksis shell.
Kyle Strand
2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) dan Fish ( fishshell.com/docs/current/tutorial.html ) keduanya memiliki penyorotan sintaks, pertanyaan ini jelas menanyakan tentang fitur serupa untuk bash. Ini adalah permintaan yang sepenuhnya valid untuk meminta fitur yang "sulit untuk diterapkan dan tetap konsisten" terutama ketika sudah ada di shell lain
Brandon