Cách truy cập shell hoặc chạy lệnh bên ngoài từ bên trong Vim

theanh

Administrator
Nhân viên
Vim, như bạn có thể đã biết, là một trình soạn thảo mạnh mẽ và có nhiều tính năng. Tại HowtoForge, chúng tôi đã viết một số hướng dẫn về Vim, bao gồm cách sử dụng cơ bản, plugin cũng như một số tính năng hữu ích khác. Nhưng với vô vàn tính năng mà Vim cung cấp, chúng tôi luôn tìm thấy điều gì đó hữu ích để chia sẻ với độc giả.

Trong hướng dẫn này, chúng tôi sẽ tập trung vào cách bạn có thể thực thi các lệnh bên ngoài cũng như truy cập shell dòng lệnh từ bên trong cửa sổ trình soạn thảo.

Thực thi các lệnh bên ngoài trong Vim​

Đôi khi bạn có thể muốn thực thi các lệnh bên ngoài từ bên trong cửa sổ trình soạn thảo Vim. Ví dụ, hãy xem xét tình huống bạn mở một tệp trong Vim, thực hiện một số thay đổi, sau đó khi cố gắng lưu những thay đổi đó, Vim đưa ra lỗi cho biết bạn không có đủ quyền.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22475%22%20height=%2234%22%3E%3C/svg%3E


Bây giờ, thoát khỏi phiên vim hiện tại và mở lại tệp với đủ quyền sẽ có nghĩa là mất tất cả các thay đổi bạn đã thực hiện, vì vậy, bạn sẽ đồng ý rằng, trong hầu hết các trường hợp, điều đó không phải là một tùy chọn. Trong những tình huống như thế này, khả năng chạy các lệnh bên ngoài từ bên trong trình soạn thảo sẽ trở nên hữu ích.

Chúng ta sẽ quay lại trường hợp sử dụng trên sau(**), nhưng bây giờ, hãy cùng tìm hiểu cách bạn có thể chạy các lệnh cơ bản từ bên trong vim.

Giả sử khi chỉnh sửa một tệp, bạn muốn biết số dòng, số từ và số ký tự mà tệp đó chứa. Để thực hiện việc này, trong chế độ lệnh của Vim, chỉ cần nhập dấu hai chấm :)) theo sau là dấu chấm than (!) và cuối cùng là lệnh ('wc' trong trường hợp này) theo sau là tên tệp (sử dụng % cho tệp hiện tại).
Mã:
:! wc %
Đây là một ví dụ:

Tệp có lệnh đã đề cập ở trên đã sẵn sàng để thực thi:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22258%22%20height=%22439%22%3E%3C/svg%3E


và đây là kết quả đầu ra trên thiết bị đầu cuối:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22376%22%20height=%2279%22%3E%3C/svg%3E


Sau khi xem xong kết quả đầu ra, hãy nhấn phím Enter và bạn sẽ được đưa trở lại Vim session.

Tính năng này có thể thực sự hữu ích trong những tình huống mà, chẳng hạn, bạn đang viết mã hoặc tập lệnh và muốn nhanh chóng biết liệu mã/tập lệnh có chứa bất kỳ lỗi biên dịch hoặc lỗi cú pháp nào hay không.

Tiếp theo, trong trường hợp yêu cầu là thêm đầu ra vào tệp, hãy sử dụng lệnh ':read !'. Sau đây là một ví dụ:
Mã:
:read ! wc %
Lệnh 'read' chèn đầu ra của lệnh bên ngoàivào một dòng mới bên dưới dòng hiện tại trong tệp đang được chỉnh sửa. Nếu muốn, bạn cũng có thể chỉ định số dòng cụ thể - đầu ra sẽ được thêm sau dòng cụ thể đó.

Ví dụ, lệnh sau sẽ thêm đầu ra của 'wc' sau dòng thứ hai của tệp.
Mã:
:2read ! wc %
Lưu ý: Sử dụng '$' để chèn sau dòng cuối cùng và '0' để chèn trước dòng đầu tiên.

Bây giờ, quay lại trường hợp sử dụng mà chúng ta đã thảo luận ở phần đầu (**), đây là lệnh sẽ giúp bạn lưu tệp mà không cần phải đóng tệp trước (có nghĩa là không mất các thay đổi chưa lưu) rồi mới mở nó với, ví dụ, sudo.
Mã:
:w ! sudo tee %

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22306%22%20height=%2247%22%3E%3C/svg%3E

Truy cập Shell trong Vim​

Ngoài việc thực thi các lệnh riêng lẻ, bạn cũng có thể thả mình vào một shell mới khởi chạy từ bên trong Vim. Để thực hiện điều này, tất cả những gì bạn phải làm là chạy lệnh sau từ trình soạn thảo:
Mã:
:shell
hoặc
Mã:
:sh
và nhập 'exit' khi bạn hoàn tất công việc với shell - lệnh này sẽ đưa bạn trở lại phiên Vim từ nơi bạn đã dừng ban đầu.

Kẽ hở cần ghi nhớ​

Mặc dù khả năng truy cập shell chắc chắn có những công dụng riêng trong thế giới thực, nhưng nó cũng có thể được sử dụng như một kỹ thuật leo thang đặc quyền. Như chúng tôi đã giải thích trong một trong những hướng dẫn trước đây của mình (về sudoedit), ngay cả khi bạn cấp cho người dùng quyền sudo để chỉ chỉnh sửa một tệp thông qua Vim, họ vẫn có thể khởi chạy một shell mới từ bên trong trình soạn thảo bằng kỹ thuật này và sau đó có thể làm bất cứ điều gì với tư cách là 'root' hoặc siêu người dùng.

Khả năng chạy các lệnh bên ngoài từ bên trong Vim là một tính năng quan trọng có thể hữu ích trong nhiều tình huống (một số trong đó chúng tôi đã đề cập trong hướng dẫn này). Đường cong học tập cho tính năng này không quá khó, vì vậy cả người mới bắt đầu cũng như người dùng có kinh nghiệm đều có thể tận dụng nó.

Bạn đã sử dụng tính năng này trong một thời gian khá dài chưa? Bạn có điều gì muốn chia sẻ không? Vui lòng để lại suy nghĩ của bạn trong phần bình luận bên dưới. Có thể bạn cũng quan tâm đến lệnh tee của Linux.
 
Back
Bên trên