Làm cách nào để quay lại ký tự đầu tiên trong dòng lệnh * nix?


17

Khi viết một lệnh dài trong dòng lệnh * nix và phải quay lại ký tự đầu tiên, để thêm một cái gì đó vào đầu (ví dụ a nohup, khi bạn nhận ra quá trình sẽ là một quá trình dài, hoặc a sudo, khi bạn nhận ra bạn cần quyền root) có thể mất nhiều thời gian để con trỏ quay trở lại ký tự đầu tiên ...

Có một đường cắt ngắn cho phép bạn nhảy thẳng đến đó không?

Tôi đang sử dụng máy Mac, vì vậy Homekhông phải là một tùy chọn


2
Nếu bạn đang sử dụng máy tính xách tay Apple, Fn + Trái / Phải tương đương với Nhà / Kết thúc. (Và có liên quan, Fn + Lên / Xuống là PageUp / Down.)
duskwuff -inactive-

2
Đối với những người đọc câu hỏi này, điều này có hiệu lực hỏi về shell, cụ thể hơn là chỉnh sửa dòng lệnh trong shell. Câu trả lời Ctrl-A trước đó là bash (rất có thể) với chỉnh sửa kiểu Emacs, mặc định.
Rich Homolka

4
Một thay thế nếu bạn chỉ cần thêm sudolà gõ sudo !!. Việc !!được thay thế bằng lệnh trước đó.
Matthew Crumley

Câu trả lời:


29

Ctrl+Anên làm việc. Ctrl+Etương ứng với cuối dòng lệnh.


1
Tuyệt quá! Điều này cũng hoạt động hoàn hảo trên mac!
clami219

1
Điều này cũng áp dụng trong nhiều trình soạn thảo mã.
Jwosty

2
@ clami219: Nó thực sự hoạt động trong hầu hết các ngữ cảnh văn bản trong OSX. Sự ràng buộc của Emacs là một điều tuyệt vời ...
tommyo

Cảm ơn bạn, nó cũng hoạt động trên Linux.
Gideon Babu

10

Điều này phụ thuộc vào vỏ trong câu hỏi.

Một số shell (như AT & T ksh88) hầu như không chỉnh sửa dòng đầu vào.

Trong shell thực hiện vichỉnh sửa chế độ (bạn có thể phải bật tính năng này set -o vi), việc này được thực hiện bằng cách nhấn Esc(để chuyển từ chế độ chèn) theo sau 0để nhảy đến đầu dòng hoặc $nhảy đến cuối dòng. Sau đó nhập lại chế độ chèn bằng cách nhấn i- con trỏ sẽ giữ nguyên vị trí - hoặc a- con trỏ sẽ di chuyển một bên phải để nối thêm văn bản.

vi chỉnh sửa chế độ gần đây đã được bắt buộc theo tiêu chuẩn POSIX.

Việc chỉnh sửa chế độ phổ biến hơn nhiều emacs (cảm ơn các vị thần, nó không liên quan gì đến trình soạn thảo-slash-hệ điều hành Emacs) sử dụng Ctrl-Ađể nhảy đến đầu dòng và Ctrl-Enhảy đến cuối dòng. Chế độ này yêu cầu bạn chạy set -o emacstrên nhiều shell (nổi bật nhất là AT & T ksh93) nhưng được bật theo mặc định trong mksh và GNU bash.

Hầu hết các vỏ hiện đại đều hỗ trợ cả emacsvichế độ. (Cả hai chế độ này yêu cầu một tty để hoạt động.)

Trong nhiều shell, bạn có thể tùy chỉnh keybindings; thường là cho emacschế độ, mặc dù một số shell cũng cho phép tùy chỉnh keybinding cho vichế độ. Nếu bạn có một khóa mà bạn muốn có ràng buộc này, trước tiên bạn cần tìm ra các chuỗi khóa mà nó tạo ra (ví dụ: trên hệ thống của tôi, Alt-CursorLefttạo ra Esc+[+1+;+3+D( ^[[1;3D; ^Xis Ctrl-X^[is Esc), vì vậy tôi có thể nhập một cái gì đó như

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

và sẽ thay đổi keybinding này, tùy thuộc vào shell. Bạn thường có thể duy trì chúng trong tệp khởi động ( ~/.mkshrc, ~/.kshrc) hoặc, cho bash GNU, trong ~/.inputrc. Lưu ý rằng không phải tất cả các shell đều hỗ trợ liên kết tất cả các khóa trong tất cả các phiên bản.

Bạn thường có thể tìm ra những gì mà một phím tạo ra bằng cách chỉ chạy cattrên vỏ, gõ phím và xem. Sau đó nhấn ^C( Ctrl-C) để hủy bỏ cat.


Tôi thích sử dụng ^ D, nhân vật cuối dòng Unix, để kết thúc con mèo. Trong tâm trí của tôi, đó là ^ D vì luồng văn bản đã "xong".
Aaron Hall

@AaronHall: điều đó sẽ không hoạt động nếu đã có thứ gì đó trên đường dây. Thêm vào đó, chúng tôi muốn hủy bỏ nó, không kết thúc nó ;-) Nhưng vâng, trong trường hợp bình thường, bạn đã đúng. Nhưng đây là một trường hợp đặc biệt.
mirabilos

Thiết bị đầu cuối có thể thực hiện chỉnh sửa dòng là tốt.
Phường Samuel Edwin

@mirabilos Để gửi EOF mà không có dòng mới, chỉ cần thực hiện ^ D ^ D (tức là nhấn D hai lần).
Potatoswatter

@Potatoswatter có (vui, tôi không biết điều đó), nhưng tôi đặc biệt muốn phá thai ở đây. Khi gửi ^D^Dtôi vẫn nhận được những thứ rác rưởi, tiếng vang của
Google

2

Bạn đã thử phím Home chưa? Tôi sử dụng MobXterm để kết nối với hộp linux và sử dụng cả phím Home và End trên bàn phím để đi đến char đầu tiên hoặc cuối cùng của lệnh.


Bạn đúng rồi! Tôi đã phải xác định rằng tôi đang sử dụng máy mac ...
clami219

2

Nếu bạn đã chuyển sang vichế độ, sử dụng set -o vi, bạn có thể nhấn Escvà để Ihoặc Anhập văn bản ở đầu hoặc cuối dòng. Hoặc nếu bạn chỉ muốn di chuyển con trỏ, thì nó ^$.


chế độ vi của vỏ gì?
David Richerby

2

Trong chế độ emacs (được chuyển đổi bởi set -o emacs:) nó bằng cách nhấn:

  • Ctrl+ACtrl+E
  • HomeEnd
  • Esc+bEsc+f(di chuyển con trỏ lùi và tiến của từ hiện tại)

Trong chế độ vi (được chuyển đổi bởi set -o vi:) khi ở chế độ lệnh ( Esc), bằng cách nhấn:

  • 0/ ^$(nó sẽ ở trong chế độ lệnh)
  • IA(nó sẽ chuyển sang chế độ chỉnh sửa)

Xem thêm:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.