Bagaimana cara menavigasi perintah panjang lebih cepat?

136

Apakah ada cara mempercepat navigasi Linux CLI ketika saya harus memasukkan perintah panjang? Saya cukup menggunakan panah saat ini, dan - jika saya memiliki perintah yang panjang, dibutuhkan beberapa waktu untuk mulai dari awal perintah hingga ke tengahnya.

Apakah ada cara misalnya melompat ke tengah perintah tanpa menggunakan panah?

Stann
sumber

Jawaban:

174

Beberapa ikatan kunci pengeditan baris bermanfaat yang disediakan oleh pustaka Readline :

  • Ctrl-A: pergi ke awal baris
  • Ctrl-E: pergi ke akhir baris
  • Alt-B: lewati satu kata ke belakang
  • Alt-F: lewati satu kata ke depan
  • Ctrl-U: hapus ke awal baris
  • Ctrl-K: hapus ke akhir baris
  • Alt-D: hapus sampai akhir kata
Adam Byrtek
sumber
7
Memberi +1 karena ini berfungsi meskipun, untuk beberapa alasan, panah ctrl tidak berfungsi. Layak untuk dicatat, bagi screenpengguna, Ctrl-A menjadi Ctrl-A A.
enzotib
3
Untuk membatalkan penghapusan (atau memindahkan teks dengan menghapusnya), gunakan Ctrl + Y.
Lekensteyn
7
Ctrl + panah kanan, Ctrl + panah kiri layak disebutkan.
mac
3
Di Ubuntu menggunakan Gnome dan GnomeTerminal Alt-Amembuka menu alih-alih memindahkan kursor. Bagaimana cara Anda menggunakan Alt-AGnome? Maksud saya, Gnome adalah default, jadi kemungkinan siapa pun yang membaca ini akan menjalankan terminal di Gnome.
Jason
1
Jika Anda terhubung ke Ubuntu dari OS X melalui SSH Anda mungkin harus menggunakan "Esc" bukan Ctrl misalnya, Esc-A, Esc-E dan sebagainya. Ini berlaku untuk iTerm dan Terminal.
Fred Clausen
77

Beberapa jalan pintas lagi dari sini

Ctrl + a  go to the start of the command line
Ctrl + e  go to the end of the command line
Ctrl + k  delete from cursor to the end of the command line
Ctrl + u  delete from cursor to the start of the command line
Ctrl + w  delete from cursor to start of word (i.e. delete backwards one word)
Ctrl + y  paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor
Ctrl + xx  move between start of command line and current cursor position (and back again)
Alt + b  move backward one word (or go to start of word the cursor is currently on)
Alt + f  move forward one word (or go to end of word the cursor is currently on)
Alt + d  delete to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + c  capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word)
Alt + u  make uppercase from cursor to end of word
Alt + l  make lowercase from cursor to end of word
Alt + t  swap current word with previous
Ctrl + f  move forward one character
Ctrl + b  move backward one character
Ctrl + d  delete character under the cursor
Ctrl + h  delete character before the cursor
Ctrl + t  swap character under cursor with the previous one
karlacio
sumber
Terima kasih atas daftar langsung dan obrolan ringan ini.
neverMind9
14

Jika Anda seorang vi [m] dan bash pengguna, Anda mungkin menemukan itu berguna untuk membuat readline (digunakan oleh bash) menggunakan editing vi-gaya dengan menambahkan set editing-mode vike Anda ~/.inputrcatau /etc/inputrcfile. Atau, Anda bisa membuat bash menggunakan pengeditan vi-style dengan menjalankan perintah bash set -o vi. Tambahkan perintah ke ~/.bashrcfile Anda untuk membuat perilaku tetap ada.

Jika Anda pengguna zsh, tambahkan bindkey -vke .zshrcfile Anda untuk mengedit gaya-vi.


sumber
8

Saya tidak tahu cara untuk secara khusus melompat ke tengah tanpa menggunakan tombol kursor. Namun, saya dapat merekomendasikan menggunakan tombol kursor CTRL + untuk berpindah dari kosong ke kosong (yaitu, beralih dari satu kata ke kata lain).

Kory Wnuk
sumber
1

Sumber cuplikan-kode di bawah ini di .bashrc Anda. Ctrl-a melompat ke awal dan menekan Ctrl-a lagi melompat ke tengah.

jump_mid() {
    if [ "$READLINE_POINT" -eq "0" ]; then
        LEN=${#READLINE_LINE}
        POS=$(($LEN / 2))
        READLINE_POINT=$POS
    else
        READLINE_POINT=0
    fi
}
bind -x '"\C-a" : jump_mid'

Atau jika Anda ingin menggunakan Ctrl-Something untuk langsung melompat ke tengah, ubah kode menjadi:

jump_mid() {
    LEN=${#READLINE_LINE}
    POS=$(($LEN / 2))
    READLINE_POINT=$POS
}

Dan ikat ke sesuatu yang berbeda dari Ctrl-a.

Marukse
sumber