Bagaimana cara melompat kembali ke karakter pertama di baris perintah * nix?

17

Saat menulis perintah panjang di baris perintah * nix dan harus kembali ke karakter pertama, untuk menambahkan sesuatu di awal (misalnya a nohup, ketika Anda menyadari prosesnya akan panjang, atau sudo, ketika Anda sadar bahwa Anda memerlukan izin root) mungkin perlu waktu lama bagi kursor untuk kembali ke karakter pertama ...

Apakah ada jalan pintas yang memungkinkan Anda melompat langsung ke sana?

Saya menggunakan mac, jadi Homebukan pilihan

clami219
sumber
2
Jika Anda menggunakan laptop Apple, Fn + Kiri / Kanan sama dengan Home / End. (Dan terkait, Fn + Atas / Bawah adalah PageUp / Down.)
duskwuff -inactive-
2
Bagi mereka yang membaca pertanyaan ini, ini berlaku menanyakan tentang shell, lebih khusus mengedit baris perintah di shell. Jawaban Ctrl-A sebelumnya adalah bash (kemungkinan besar) dengan pengeditan gaya Emacs, default.
Rich Homolka
4
Alternatif jika Anda hanya perlu menambahkan sudoadalah mengetik sudo !!. The !!akan diganti dengan perintah sebelumnya.
Matthew Crumley

Jawaban:

29

Ctrl+Aharus bekerja. Ctrl+Esesuai dengan akhir baris perintah.

choroba
sumber
1
Bagus! Ini berfungsi dengan baik juga di mac!
clami219
1
Ini juga berlaku di banyak editor kode.
Jwosty
2
@ clami219: Ini sebenarnya berfungsi di sebagian besar konteks teks di OSX. Binding Emacs adalah hal yang luar biasa ...
tommyo
Terima kasih, ini bekerja di Linux juga.
Gideon Babu
10

Ini tergantung pada shell yang dimaksud.

Beberapa shell (seperti AT&T ksh88) hampir tidak menawarkan pengeditan input line.

Di shells yang menerapkan vimode editing (Anda mungkin harus mengaktifkan ini dengan set -o vi), ini dilakukan dengan menekan Esc(untuk beralih dari mode insert) diikuti dengan 0untuk melompat ke awal baris atau $untuk melompat ke akhir baris. Kemudian masukkan kembali mode penyisipan dengan menekan i- kursor akan tetap di tempatnya - atau a- kursor akan memindahkan satu ke kanan untuk menambahkan teks.

vi pengeditan mode baru-baru ini dimandatkan oleh standar POSIX.

The jauh lebih umum emacs editing modus (terima dewa, itu tidak ada hubungannya dengan Emacs editor slash-sistem operasi) menggunakan Ctrl-Auntuk melompat ke awal baris dan Ctrl-Emelompat ke akhir baris. Mode ini mengharuskan Anda untuk menjalankan set -o emacsbanyak shell (paling jelas AT&T ksh93) tetapi diaktifkan secara default di mksh dan GNU bash.

Sebagian besar shell modern mendukung mode emacsdan vimode. (Kedua mode ini membutuhkan tty untuk berfungsi.)

Dalam banyak shell, Anda dapat menyesuaikan keybindings; biasanya untuk emacsmode, meskipun beberapa shell juga memungkinkan menyesuaikan keybinding untuk vimode. Jika Anda memiliki kunci yang ingin Anda gunakan untuk terikat, pertama-tama Anda harus mengetahui urutan kunci yang dihasilkannya (misalnya, pada sistem saya, Alt-CursorLeftmenghasilkan Esc+[+1+;+3+D( ^[[1;3D; ^Xadalah Ctrl-Xdan ^[sekarang Esc), jadi saya dapat mengetikkan sesuatu seperti

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

dan pengikat kunci ini akan berubah, tergantung pada cangkangnya. Anda biasanya dapat menyimpannya di file startup ( ~/.mkshrc, ~/.kshrc) atau, untuk GNU bash, di ~/.inputrc. Perhatikan bahwa tidak semua cangkang mendukung mengikat semua kunci di semua versi.

Anda biasanya dapat mengetahui karakter apa yang dihasilkan kunci dengan hanya berjalan catdi shell, mengetik kunci dan menonton. Lalu tekan ^C( Ctrl-C) untuk membatalkan cat.

mirabilos
sumber
Saya suka menggunakan ^ D, karakter garis akhir Unix, untuk mengakhiri kucing. Dalam pikiran saya, ini ^ D karena aliran teks "selesai".
Aaron Hall
@ Harunall: itu tidak akan berfungsi jika sudah ada sesuatu di telepon. Plus, kami ingin membatalkannya, bukan mengakhirinya ;-) Tapi ya, dalam kasus normal Anda benar. Tetapi ini adalah kasus khusus.
mirabilos
Terminal juga dapat mengedit baris.
Samuel Edwin Ward
@mirabilos Untuk mengirim EOF tanpa baris baru, cukup lakukan ^ D ^ D (yaitu tekan D dua kali).
Potatoswatter
@Potatoswatter ya (menyenangkan, saya tidak tahu itu sendiri), tapi saya secara khusus ingin membatalkan di sini. Ketika mengirim ^D^Dsaya masih mendapatkan "sampah" bergema ...
mirabilos
2

Sudahkah Anda mencoba tombol Beranda? Saya menggunakan MobXterm untuk terhubung ke kotak linux dan menggunakan tombol Home dan End pada keyboard untuk pergi ke char pertama atau terakhir dari perintah.

PAS
sumber
Kamu benar! Saya harus menentukan bahwa saya menggunakan mac ...
clami219
2

Jika Anda telah beralih ke vimode, menggunakan set -o vi, Anda dapat menekan Escdan salah satu Iatau Auntuk memasukkan teks di awal atau di akhir baris. Atau jika Anda hanya ingin memindahkan kursor, itu ^dan $.

TankorSmash
sumber
Mode vi dari shell apa?
David Richerby
2

Dalam mode emacs (diaktifkan oleh:) set -o emacsitu dengan menekan:

  • Ctrl+A dan Ctrl+E
  • Home dan End
  • Esc+bdan Esc+f(menggerakkan kursor ke belakang dan ke depan dari kata saat ini)

Dalam mode vi (diaktifkan oleh:) set -o viketika dalam mode perintah ( Esc) dengan menekan:

  • 0/ ^dan $(itu akan tetap dalam mode perintah)
  • Idan A(itu akan beralih ke mode edit)

Lihat juga:

kenorb
sumber