Ưu điểm của việc sử dụng set -o vi


55

Tôi đã thấy nhiều nhà phát triển sử dụng lệnh này để đặt tùy chọn thành vi. Tôi không bao giờ hiểu công dụng thực sự của điều này?

Khi sử dụng các lệnh bash, việc chuyển sang vi cung cấp trợ giúp gì?

Câu trả lời:


58

Bằng cách đặt chỉnh sửa dòng đọc của bạn thành emacs (mặc định) hoặc vi ( set -o vi), về cơ bản bạn đang chuẩn hóa các lệnh chỉnh sửa của mình, trên trình bao và trình soạn thảo bạn chọn 1 .

Vì vậy, nếu bạn muốn chỉnh sửa một lệnh trong trình bao, bạn sử dụng cùng một lệnh 2 mà bạn sẽ làm nếu bạn đang ở trong trình soạn thảo văn bản của mình. Điều này có nghĩa là chỉ cần nhớ một cú pháp lệnh và (nếu điều đó không đủ lợi thế) có thể sẽ giúp việc chỉnh sửa của bạn trong cả hai môi trường nhanh hơn và ít bị lỗi hơn ...

Bạn có thể tận dụng mối quan hệ này trong chế độ vi bằng cách kéo bất kỳ lệnh nào từ lịch sử shell của bạn, nhấn Escapeđể vào chế độ lệnh và sau đó nhấn v, sẽ mở $ EDITOR của bạn với lệnh được tải để chỉnh sửa phức tạp hơn với toàn bộ sức mạnh của vim. Một khi bạn đã hoàn thành chỉnh sửa lệnh cho thỏa mãn :wqvà lệnh được thực hiện lại trong trình bao của bạn.


1. Tất nhiên, giả sử rằng bạn sử dụng Emacs hoặc Vi / m làm trình chỉnh sửa của mình.
2. Hay chính xác hơn là một tập hợp con của chúng ...


1
Tôi đã nhận được chén thánh :) ....
Sathyam

3
Thủ thuật Esc-v là một trong những tính năng tốt nhất set -o vimà hầu hết mọi người không biết. Điều này đặc biệt đúng nếu bạn muốn phát hành cùng một lệnh nhiều lần với các đối số khác nhau (dưới dạng nhiều lệnh dòng lệnh).
Michael Goldshteyn

2
Thủ thuật Esc-v không thực sự là một lợi thế cụ thể set -o vi. Trong cài đặt mặc định của set -o EMACS, Cx, Ce sẽ hiển thị cửa sổ emacs (hoặc $EDITOR, nếu được đặt) trong đó bạn có thể chỉnh sửa lệnh trước khi chạy.
John Gowers

8

Chế độ Vi là một cải tiến khả năng sử dụng rất lớn nếu bạn đang sử dụng máy khách SSH di động như ConnectBot cho Android.

Điều này là do sự phụ thuộc giảm vào các phím bổ trợ.

Vim dễ sử dụng hơn với bàn phím ảo trên điện thoại thông minh hoặc máy tính bảng so với ... mọi thứ khác, kể cả các phương pháp chỉnh sửa gốc được tích hợp trong Giao diện người dùng Android. Trớ trêu thay, việc chỉnh sửa nguồn C bằng Vim trong phiên SSH dễ dàng hơn so với chỉnh sửa, giả sử, một tin nhắn tức thời với tiện ích chỉnh sửa riêng của nền tảng cho mục đích đó.

Chế độ Shell vi mang lại một lợi ích tương tự.


Tôi đã hy vọng có chế độ vi trên bàn phím điện thoại của tôi. Bạn đề cập đến điều này như thể nó đã tồn tại. Làm cách nào để có chế độ vi trên điện thoại?
meh

6

Nó cho phép bạn chỉnh sửa nội dung tại dòng lệnh bằng cách sử dụng các chế độ và thao tác vi.

Một ví dụ sẽ giúp làm cho nó rõ ràng hơn nhiều:

Bạn gõ cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

nhưng bạn nhận được một lỗi - bạn nên đã gõ file1.txtkhôngfile1.xt

Nếu không có tùy chọn này được đặt, bạn nhấn mũi tên lên và sau đó nhấn mũi tên trái và để nó lặp lại trong ... 35 lần, cho đến khi bạn đến .xtvà sau đó bạn nhập thêm t. Tổng số tổ hợp phím: 37 .

Với tùy chọn này, bạn có thể (ví dụ) nhấn mũi tên lên một lần, sau đó Thoát cho chế độ lệnh, 0 để đi đến đầu dòng và sau đó /xt[return]để đến xtvà sau đó bạn có thể nhập icho chế độ chèn và nhập t thiếu. Điều này có vẻ cực kỳ phức tạp ở một số khía cạnh nhưng nếu bạn là người dùng vim thì các lệnh này đã rất nổi tiếng. Tổng số tổ hợp phím: 9


1
Bạn cũng có thể sử dụng một vài Alt+Bhoặc một Ctrl+Alt+] .chế độ Emacs, vì vậy đây dường như không phải là một ví dụ mạnh mẽ đối với tôi.
Mikel

2
Thấy như chúng ta đang chơi golf: Chế độ Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi chế độ: Up, F, ., a, t, Enter= 7. :)
Mikel

@Mikel bạn quên rằng chế độ vi bắt đầu ở chế độ Chèn nên bạn cũng Escở đó, đó là một cái chết nóng.
dragon788

5

Tôi không chắc có lợi thế trực tiếp không. Tôi đã là vingười dùng hơn 20 năm. Tôi cũng là screenngười dùng lâu hơn và các chương trình khác sử dụng vikhóa. Đối với tôi, việc đặt chế độ "vi" trong bash là điều tự nhiên. Nhưng tôi cũng làm việc trên hàng trăm máy chủ trong công việc của mình, hầu hết được đặt ở chế độ "emacs" mặc định. Vì vậy, tôi cần phải sử dụng cả hai chế độ. Nhưng nó thực sự chỉ là một vấn đề ưu tiên.


Tình huống tương tự đối với tôi - Tôi sử dụng vim rất nhiều nhưng tôi luôn thấy việc sử dụng thành thạo các phím đọc giống như emacs mặc định (có thể thuận tiện như tập con vi), nó có thể thuận tiện như việc chuyển đổi dòng đến chế độ vi trên mọi hệ thống mới tôi gặp.
jw013

1
Tôi không làm việc trên hàng trăm máy chủ, nhưng tôi sử dụng sshrc để giữ cho thiết lập bash của tôi giống nhau giữa các máy tính khác nhau khi sshing. Tất nhiên, điều đó không có ích khi tôi đang sử dụng một máy cục bộ không có .bashrccông cụ của tôi trên đó.
Kyle Strand

4

Ưu điểm chính là chỉnh sửa phương thức dòng lệnh của bạn. Nếu bạn quen thuộc với Vim và thích triết lý của nó, lợi ích phải rõ ràng. Nếu bạn có kinh nghiệm với nó, bộ nhớ cơ ngón tay của bạn sẽ khiến bạn chỉnh sửa các lệnh bash của mình với tốc độ cực nhanh.

Lưu ý : Nếu bạn không thích chỉnh sửa phương thức, bạn vẫn nên học cách tận dụng chế độ emacs (mặc định). Dưới đây là một số phím tắt tiện lợi sẽ hoạt động trên mọi quy trình với readline, như bash.


1

Nếu bạn đã quen vi, vì vậy bạn đặt nó ở chế độ vi làm trình soạn thảo shell của bạn. Đó là lý do rõ ràng. Một cái khác là khi bashkhông có sẵn theo mặc định trong một số HĐH (chủ yếu là UNIX như AIX, Solaris), do đó, tính năng lịch sử shell không khả dụng, do đó, cách bạn nhận được các lệnh trong quá khứ bằng cách đặt trình soạn thảo shell thành vi, và Esc, Ctrl+ Khoặc Ctrl+L


1

Nó có thể cho phép bạn dễ dàng điều hướng và chỉnh sửa dòng lệnh bằng các phím tắt của vim, ví dụ: nhanh chóng di chuyển sang một từ bên phải, xóa một từ.

Theo các phím tắt mặc định, khi bạn cần đi đến cuối dòng, bạn cần Ctrl+ e, trong khi đó set -o vi, bạn chỉ cần nhấn $, như trong vim.


1

Có lẽ là đến bữa tiệc muộn, nhưng đối với tôi, sử dụng chế độ vi sẽ nói nhiều hơn khi tạo các đoạn mã tương tác .. chẳng hạn

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

một ví dụ rất đơn giản về những gì có thể khá phức tạp .. việc sử dụng ESCkvsẽ đưa bạn vào một phiên vi nơi bạn có thể sửa đổi tập lệnh và sau đó :wqnó chạy.


1
Đây có thể là một ví dụ tốt về việc sử dụng bash trong vichế độ, nhưng nó là một ví dụ tồi về mã bash. (1) Sử dụng đầu ra từ lsđầu vào cho bất kỳ loại xử lý nào khác là một ý tưởng tồi. (2) $(…)Cú pháp thay thế lệnh được coi là dễ đọc hơn `…`cú pháp. (3) Bạn phải luôn trích dẫn các biến shell trừ khi bạn có lý do chính đáng để không và bạn chắc chắn rằng bạn biết bạn đang làm gì.
G-Man nói 'Phục hồi Monica'
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.