Bagaimana cara melewatkan kata di terminal OS X?


11

Katakanlah saya menulis perintah panjang di terminal Mac OSX, yaitu

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

dan sekarang saya ingin mengubah kata Hellomenjadi Hi.

Untuk melakukan itu, sekarang saya harus terus menekan (atau menahan) tombol keyboard kiri sampai "kursor" sampai ke akhir kata Hello, dan kemudian menghapusnya. Teknik 'menahan opsi' yang biasa tidak berfungsi seperti halnya di sebagian besar aplikasi OS X lainnya.

Apakah ada cara untuk melewatkan kata pada suatu waktu (atau cara lain yang lebih pendek untuk mendapatkan kursor di sana)?

Jawaban:


19

Pengeditan baris perintah adalah fungsi dari shell Anda, bukan Terminal . Mungkin shell Anda bash dan mungkin gaya pengeditan baris perintahnya diatur ke "emacs".

Berikut adalah beberapa kombinasi tombol gaya Emacs yang mungkin berguna bagi Anda:

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mb: backward-word
  • CD: delete-char
  • Md: kill-word(hapus 'kata' berikutnya)
  • M-DEL: backward-kill-word

C- x berarti Control+ x, jadi Ca adalah Control+ a.

M- x berarti Meta+ x, tetapi mungkin tidak ada kunci Meta pada keyboard Anda. Jadi sebagai gantinya, Anda dapat menggunakan ESC x (yaitu Escapekemudian x). Terminal memiliki pengaturan untuk mengirim ESC secara otomatis sebelum tombol ditekan dengan Optionditahan. Menggunakan fitur ini menonaktifkan penanganan karakter diperluas yang biasanya disediakan oleh Mac OS X saat menggunakan pengubah Opsi. Jadi, jika Anda menggunakan beberapa karakter tambahan dan ingin Option+ xmengirim ESC x , maka Anda dapat mengaktifkan opsi Terminal ini .

Ada banyak cara untuk pindah ke "Halo" dalam contoh Anda:

  • Cari “Halo”: Cr H ello Cj (atau ESC)
    • Dalam Emacs normal, Anda hanya akan menggunakan RET ( Return) untuk mengakhiri pencarian di lokasi saat ini dan kembali ke pengeditan. Tetapi dalam bash , binding standar menyebabkan RET (yaitu Cm) untuk selalu mengeksekusi baris saat ini, bahkan jika pencarian tambahan aktif. Jadi bagian Cj / ESC adalah penyimpangan dari Emacs normal.
  • Lompat ke awal garis dan bergerak maju: Ca Mf Cf (atau )
  • Lompat ke awal baris, lalu gerakkan dengan kata-kata: Ca Mf Mf Mb
  • Gunakan Mb banyak (hanya benar-benar layak jika Anda memetakan Opsi ke Meta).

Ada juga beberapa cara untuk mencapai pengganti yang Anda inginkan:

  • hapus kata dan ganti: Md H i
  • hapus karakter dan ganti mereka: Cd Cd Cd Cd Cd H i
  • pindah melewati "H" dan hapus karya berikut, ganti: Cf Md i
  • bergerak melewati "H" dan menghapus karakter yang tersisa, ganti mereka: Cf Cd Cd Cd Cd i

Jika Anda berhenti di akhir kata (mungkin melalui Ca Mf Mf), Anda bisa menggunakan M-DEL H i.

Anda mungkin melakukan sesuatu seperti bind -P | lessmenemukan ikatan menarik lainnya. Konsultasikan dengan bagian readline dari halaman bash man (atau bagian readline dari halaman info bash ) untuk detailnya.


Ok, ini tidak benar-benar berkaitan dengan pertanyaan, tetapi bagaimana Anda memasukkan kata-kata yang terlihat seperti tombol keyboard di sana?
Wuffers

1
@Pak. Man: Gunakan <kbd>elemen. Sebuah subset dari HTML diperbolehkan dalam markup di sini . Penampilan ini disebabkan oleh penandaan situs-lokal dari tag (latar belakang, warna garis tepi, gaya tepi, lebar batas, dll.). Anda dapat meninjau markup sumber dari posting saya ("lihat sumber" di halaman ini ). Lihat meta.stackexchange.com/questions/5527 meskipun gaya mewah dinonaktifkan di MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen

Saya tidak yakin apakah ini jelas atau tidak, saya perlu satu menit untuk mengetahuinya, tapi saya menggunakan MBP tanpa kunci meta dan saya menggunakan konfigurasi Terminal default. Untuk bergerak maju dan mundur pada kata-kata saya dapat menekan Esc dan kemudian F, atau Esc dan kemudian B. Hanya ingin menyebutkan bahwa karena cara itu dijelaskan di atas adalah membuat saya mencoba dan tekan Esc + x dan kemudian f atau b ...
cwd

Apakah ada cara untuk mengubah lingkungan atau shell sehingga saya bisa melakukan tombol panah ctrl atau fn + agar sesuai dengan IDE saya?
codecowboy

1
Anda juga dapat menggunakan binding vi dengan menambahkan set -o vi.bashrc Anda! gnu.org/software/bash/manual/html_node/…
Will Munn

2

Pengikatan readline default forward-wordadalah Meta-F ( bash(1)halaman manual, bagian READLINE , Sub- bagian Perintah untuk Memindahkan ). Saya tidak yakin apa yang diterjemahkan oleh Meta di OS X. Opsi, mungkin.


+1 - Anda sebenarnya benar. ini bekerja di bash di OSX
Yuval
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.