Post

Vi and Vim

Vi and Vim

Vi

Bạn có thể sử dụng vi để chỉnh sửa bất kỳ tệp văn bản nào. vi sao chép tệp cần chỉnh sửa vào một bộ đệm, hiển thị bộ đệm và cho phép bạn thêm, xóa và thay đổi văn bản. Khi bạn lưu các chỉnh sửa của mình, vi sao chép bộ đệm đã chỉnh sửa trở lại vào một tệp, thay thế tệp cũ có cùng tên.

Opening a file

Gõ vi [tên tệp] để mở một tệp hiện có hoặc một tệp mới. Lưu ý dấu ngã ở bên trái, biểu thị các dòng trống và tên cũng như trạng thái của tệp trên dòng cuối cùng (được gọi là dòng nhắc hoặc dòng trạng thái).
Khi bạn mở một tập tin, bạn bắt đầu ở chế độ lệnh, một trong hai chế độ mà vi hoạt động (chế độ còn lại là chế độ chèn). Trong chế độ lệnh, mỗi lần nhấn phím đều đại diện cho một lệnh, chứ không phải là văn bản mà bạn cố gắng nhập. Để chuyển sang chế độ chèn, bạn sử dụng i, I, a, A và một vài lệnh khác. Để quay lại chế độ lệnh, bạn sử dụng phím ESC.

Basic editing

Sau khi vào chế độ chỉnh sửa, bạn có thể di chuyển bằng các phím mũi tên, xóa văn bản đã có bằng phím Delete và nhập văn bản mới như trong bất kỳ trình soạn thảo nào khác (nhưng lưu ý rằng bạn không thể sử dụng chuột trong vi (xem bên dưới)). Để chuyển về chế độ dòng lệnh, hãy sử dụng phím ESC.

To save and quit a file

Sử dụng lệnh ZZ để lưu chỉnh sửa và thoát (lưu ý rằng ZZ được viết hoa; các lệnh của vi phân biệt chữ hoa chữ thường). Tuy nhiên, trong vi, việc sử dụng các lệnh từ một trình soạn thảo khác, được gọi là ex (thực tế, vi là chế độ trực quan của trình soạn thảo đó!) rất phổ biến. Để lưu và thoát tệp bằng lệnh ex, bạn gõ :wq hoặc :x. Bạn gõ :q! để thoát khỏi trình soạn thảo mà không lưu tệp.

Intermediate vi

Có rất nhiều lệnh vi bổ sung, giúp việc chỉnh sửa của bạn hiệu quả hơn. Dưới đây là một số lệnh mà tôi thấy hữu ích:

Simple edits

Phím i để chèn văn bản trước con trỏ (I ở đầu dòng)

Phím a để thêm văn bản sau con trỏ (A ở cuối dòng)

Phím d để xóa

  • Phím dw để xóa một từ
  • Phím dd để xóa một dòng
  • Phím dl hoặc x để xóa một ký tự
  • Phím D để xóa từ vị trí con trỏ đến cuối dòng Phím r để thay thế một ký tự (mà không chuyển sang chế độ chỉnh sửa)

Phím ~ để thay đổi kiểu chữ

Bạn cũng có thể sử dụng cw, cc, C để thay đổi một từ, một dòng hoặc phần còn lại của dòng và s để thay thế ký tự tại vị trí con trỏ (S sẽ thay thế một dòng).
Với hầu hết các lệnh này, bạn có thể thêm một số nguyên phía trước để thực hiện chúng nhiều lần. Ví dụ: 2dd sẽ xóa hai dòng, 2cb sẽ đổi lại hai từ, và 20i hi, there! + ESC sẽ chèn cụm từ đó 20 lần.
Cuối cùng, dấu chấm (.) sẽ lặp lại lệnh trước đó và dấu mũi tên (u) sẽ hoàn tác thay đổi cuối cùng.

Complex movements

Có các lệnh vi để cuộn tới và lui trong tệp theo toàn màn hình và nửa màn hình: ^F, ^D, ^B và U, tương ứng, trong đó ^ đại diện cho phím CTRL.
Trên màn hình, bạn có thể di chuyển đến dòng đầu tiên, dòng giữa và dòng cuối cùng bằng các phím H, M và L.
Sử dụng các ký tự 0 / ^ và $ để di chuyển đến đầu và cuối dòng.
Sử dụng #G để di chuyển đến một dòng cụ thể (#) trong tệp của bạn. G mà không có số dòng sẽ di chuyển con trỏ đến dòng cuối cùng của tệp. Gõ hai dấu ngoặc kép sẽ đưa bạn trở lại vị trí ban đầu. Nhân tiện, để hiển thị số trong vi, hãy gõ...
:set nu hoặc :set number ( :set nu! hoặc :set nonumber để xóa chúng).
Rõ ràng, cũng có các lệnh cho "các thao tác di chuyển đơn giản": h, j, k và l di chuyển con trỏ sang trái, xuống, lên và phải tương ứng, trong khi e và b di chuyển nó đến đầu/cuối từ. + và - sẽ di chuyển bạn đến ký tự đầu tiên của dòng tiếp theo và dòng trước đó tương ứng.

Movement by Searches

Một cách nhanh chóng để di chuyển trong một tệp lớn là tìm kiếm một mẫu ký tự bằng cách sử dụng lệnh / (dấu gạch chéo). Khi bạn nhập dấu gạch chéo, nó sẽ xuất hiện ở dòng dưới cùng của màn hình; sau đó bạn nhập mẫu mà bạn muốn tìm: /mẫu và nhấn ENTER. Bạn có thể sử dụng biểu thức chính quy trong mẫu tìm kiếm của mình.
  • Để tìm kiếm ngược, hãy nhập ?pattern.
  • Để lặp lại tìm kiếm xuôi/ngược, hãy nhập và /N tương ứng.
Bạn cũng có thể tìm kiếm một ký tự cụ thể trong một dòng bằng cách sử dụng các lệnh fx và Fx (x có thể là bất kỳ ký tự nào). Phím ; và , sẽ lặp lại quá trình tìm kiếm.

Cutting, copying, and pasting.

Để cắt bất kỳ đoạn văn bản nào khỏi một tệp, bạn sử dụng lệnh xóa (tất cả các phiên bản của lệnh d, như dd và dw đều hoạt động). Đoạn văn bản bị xóa sẽ được lưu tạm thời trong một bộ đệm đặc biệt. Để dán lại, hãy sử dụng lệnh p (put). Chữ p viết thường sẽ đặt văn bản sau vị trí con trỏ. Chữ P viết hoa sẽ đặt văn bản trước vị trí con trỏ.
Có chín vùng đệm không tên, nơi lưu trữ các thao tác xóa của bạn. Bạn truy cập chúng bằng "". Thao tác xóa cuối cùng được lưu trong vùng đệm 1, thao tác xóa thứ hai từ cuối trong vùng đệm 2, v.v. Để khôi phục thao tác xóa thứ hai từ cuối, hãy nhập: "2p ."
Để sao chép một đoạn văn bản, hãy sử dụng lệnh y (viết tắt của yank - sao chép toàn bộ). Lệnh yank có thể được kết hợp với bất kỳ lệnh di chuyển nào (yw, y$, y^). Cả yy và Y đều sao chép toàn bộ dòng. Sau khi sao chép một đoạn văn bản, bạn có thể dán nó bằng lệnh p hoặc P.
Ngoài các bộ đệm không tên, còn có 26 bộ đệm có tên (a-z) nơi bạn có thể lưu văn bản đã bị xóa hoặc sao chép.
"z5dd sẽ xóa năm dòng vào bộ đệm z
"z5yy sẽ sao chép năm dòng vào bộ đệm z
Nếu bạn chỉ định tên bộ đệm bằng chữ cái viết hoa, văn bản bạn đã sao chép hoặc xóa sẽ được thêm vào nội dung hiện tại của bộ đệm đó.

Joining Two Lines with J

Sử dụng phím J để nối dòng hiện tại với dòng tiếp theo.

Repeating or Undoing Your Last Command

Dấu chấm (.) sẽ lặp lại lệnh trước đó. Dấu phẩy (.) sẽ hoàn tác lệnh trước đó. Dấu phẩy (.) hoàn tác tất cả các chỉnh sửa trên một dòng duy nhất, miễn là con trỏ vẫn nằm trên dòng đó.

Advanced vi

Ex editor

Bạn đã thấy một số lệnh ex rồi ( :x , :wq , v.v.). Thực tế, mỗi khi chúng ta gõ dấu hai chấm trong vi, chúng ta đều gọi một lệnh ex. Về mặt kỹ thuật, ex là trình soạn thảo dòng và vi là chế độ trực quan của nó (còn được gọi là trình soạn thảo màn hình). Bạn có thể sử dụng ex một mình trong Unix, nhưng nó có thể hơi phức tạp. Điều cần nhớ là ex xử lý các dòng, vì vậy các lệnh cơ bản d , m , co sẽ xóa, di chuyển và sao chép một dòng. Sức mạnh của ex đến từ khả năng xử lý nhiều dòng cùng một lúc.

Three ways to access lines in ex:

  • Có số dòng rõ ràng
  • Có các ký hiệu giúp bạn chỉ định số dòng tương đối so với vị trí hiện tại trong tệp
  • Có các mẫu tìm kiếm dưới dạng địa chỉ để xác định các dòng cần được điều chỉnh
Cách đầu tiên khá dễ hiểu: :3,18d sẽ xóa các dòng từ 3 đến 18 (hãy nhớ rằng bạn có thể xem số dòng bằng cách sử dụng :set nu hoặc :set number).
Bạn cũng có thể sử dụng các ký hiệu cho địa chỉ dòng. Dấu chấm . đại diện cho dòng hiện tại; và $ đại diện cho dòng cuối cùng của tệp. % đại diện cho mọi dòng trong tệp. Ví dụ: :.,$d xóa từ dòng hiện tại đến cuối tệp và :%d xóa tất cả các dòng trong tệp.
Cuối cùng, bạn có thể truy cập các dòng bằng cách sử dụng các mẫu tìm kiếm. Ví dụ: :/pattern/d xóa dòng tiếp theo có chứa mẫu. :/pattern/+d xóa dòng bên dưới dòng tiếp theo chứa pattern, trong khi :/pattern1/,/pattern2/d xóa từ dòng đầu tiên chứa pattern1 đến dòng đầu tiên chứa pattern2
Cuối cùng, cả ba cách truy cập dòng có thể được kết hợp trong cùng một lệnh.

Thay thế toàn cục

Thay thế toàn cục sử dụng hai lệnh ex: :g (toàn cục) và :s (thay thế).
Lệnh thay thế :s/old/new/ thay đổi lần xuất hiện đầu tiên của pattern old thành new trên dòng hiện tại. Nếu bạn thêm g sau pattern: :s/old/new/g, nó sẽ thay đổi mọi lần xuất hiện của old thành new trên dòng hiện tại.
Bằng cách thêm địa chỉ vào trước lệnh :s, bạn có thể mở rộng phạm vi của nó lên nhiều dòng: :50,100s/old/new/g hoặc (cách tôi thích nhất) :%s/old/new/g.
Để xác nhận mỗi lần thay thế trước khi thực hiện, hãy thêm tùy chọn c (để xác nhận) vào cuối lệnh thay thế : :1,30s/his/the/gc. Ngoài ra, bạn cũng có thể sử dụng n (lặp lại tìm kiếm cuối cùng) và dấu chấm . (lặp lại lệnh cuối cùng).
Bạn cũng có thể thay thế chỉ trên các dòng khớp với một mẫu cụ thể bằng cách kết hợp lệnh toàn cục g và lệnh thay thế s: :g/pattern/s/old/new/g (bạn có thể bỏ qua old nếu nó giống với pattern).
Khi thực hiện thay thế, bạn có thể tìm kiếm không chỉ các chuỗi ký tự cố định mà còn cả các biểu thức chính quy (sử dụng . , * , [] , v.v.).
\( \) Lưu mẫu nằm giữa ( và ) vào một “bộ đệm giữ”. Có thể lưu tối đa chín mẫu theo cách này trên một dòng và sử dụng chúng trong chuỗi thay thế bởi các chuỗi từ \1 đến \9.
\< \> khớp với các ký tự ở đầu (<) hoặc cuối (>) của một từ
Ngoài các ký tự thông thường và biểu thức chính quy, vi có thể sử dụng Biểu thức ngoặc vuông POSIX trong tìm kiếm. Ví dụ bao gồm các ký tự chữ số [:alnum:] , ký hiệu sắp xếp [.sch.] , và các lớp tương đương [=e=] khớp với e, è hoặc é trong ngôn ngữ tiếng Pháp. Lưu ý rằng các biểu thức này nên được sử dụng bên trong dấu ngoặc vuông (ví dụ: [[:alpha:]] ).

Working with multiple files

Copying a file into another file

Để đọc nội dung của một tệp khác vào tệp bạn đang chỉnh sửa, hãy sử dụng lệnh `:read filename` hoặc `:r filename`.
Nếu bạn muốn chỉ định một dòng khác với dòng con trỏ hiện tại, chỉ cần nhập số dòng (hoặc địa chỉ dòng khác) bạn muốn trước `r` (hoặc `read`). Bạn cũng có thể sử dụng tất cả các cách khác để truy cập các dòng trong ví dụ.

Chỉnh sửa nhiều tệp

Bạn có thể chỉnh sửa nhiều tệp trong vi(m) bằng cách cung cấp một số tên tệp làm đối số của vi: `vi file1 file2 file3` hoặc `vi file*`. Bạn cũng có thể tải một tệp khác bất cứ lúc nào bằng lệnh `:e` của ví dụ. (:e .) Tuy nhiên, cần lưu ý rằng để chỉnh sửa một tệp khác trong vi, trước tiên bạn cần lưu tệp hiện tại ( :w ), sau đó nhập lệnh: :e filename . Sau khi bạn đã chỉnh sửa xong tệp đầu tiên, lệnh :w sẽ ghi (lưu) file1 và :n sẽ gọi tệp tiếp theo (file2). Lệnh :args (viết tắt là :ar ) liệt kê tất cả các tệp bạn đang chỉnh sửa, với tệp hiện tại được đặt trong ngoặc vuông. Bạn cũng có thể sử dụng lệnh vi Ctrl^ để chuyển đến tệp bạn đã chỉnh sửa trước đó.

Mở các tệp trong các tab hoặc cửa sổ khác nhau (chia màn hình)

  • Sử dụng lệnh vi -p file1 file2 file3 để mở nhiều tệp trong các tab khác nhau;

  • Sử dụng lệnh vi -o file1 file2 file3 để mở các tệp theo chiều ngang;

  • Sử dụng lệnh vi -O file1 file2 file3 để mở các tệp theo chiều dọc.

Tìm kiếm và thay thế trong nhiều tệp

Thường thì cần tìm kiếm và thay thế trong nhiều tệp. Mẹo này sử dụng các thủ tục từ việc chạy một lệnh trong nhiều bộ đệm để minh họa cách thực hiện thao tác thay thế nhiều lần bằng cách sử dụng :argdo (tất cả các tệp trong danh sách đối số), hoặc :bufdo (tất cả các bộ đệm), hoặc :tabdo (tất cả các tab), :windo (tất cả các cửa sổ trong tab hiện tại), hoặc :cdo (tất cả các tệp được liệt kê trong danh sách quickfix).
Ví dụ sau thực hiện tìm kiếm và thay thế trong tất cả các bộ đệm (tất cả những bộ đệm được liệt kê bằng lệnh :ls):
:bufdo %s/pattern/replace/ge | cập nhật
Đây thực chất là hai lệnh trong bufdo: lệnh đầu tiên là lệnh tìm kiếm và thay thế %s quen thuộc và lệnh thứ hai là update, chỉ ghi vào tệp nếu có thay đổi. Tùy chọn e trong lệnh %s cho biết nó không in lỗi nếu không tìm thấy mẫu và | là dấu phân cách giữa các lệnh.
Một cách khác là đặt tùy chọn autowriteall để các bộ đệm đã thay đổi được tự động lưu khi cần thiết:
:set autowriteall :bufdo %s/pattern/replace/ge
Một cách khác nữa là đặt tùy chọn 'hidden' để không cần lưu các bộ đệm, sau đó sử dụng :wa để lưu tất cả các thay đổi (chỉ các bộ đệm đã thay đổi mới được ghi):
:set hidden :bufdo %s/pattern/replace/ge :wa
Nếu bạn không Nếu bạn muốn lưu kết quả thay thế nhưng muốn xem lại từng buffer đã thay đổi trước, bạn có thể bufdo!:
:bufdo! %s/pattern/replace/ge

VIM (Vi IMproved)

Syntax extensions

Vim cho phép bạn kiểm soát thụt lề và mã màu dựa trên cú pháp của văn bản.

Hỗ trợ lập trình viên

Vim cung cấp nhiều tính năng thường thấy trong Môi trường Phát triển Tích hợp (IDE).

Giao diện người dùng đồ họa (GUI)

Lập trình kịch bản và plugin

Bạn có thể tự viết các tiện ích mở rộng cho Vim hoặc tải xuống các plugin từ Internet.

Khởi tạo

Vim, giống như vi, sử dụng các tệp cấu hình để định nghĩa các phiên khi khởi động, nhưng Vim có một kho hành vi có thể định nghĩa được mở rộng hơn nhiều.

Ngữ cảnh phiên làm việc

Vim lưu trữ thông tin phiên làm việc trong một tệp, .viminfo. Vim không chỉ ghi nhớ các chỉnh sửa trong phiên làm việc cuối cùng của bạn cho một tệp, mà còn ghi nhớ những điều cơ bản giữa các tệp. Điều này rất hữu ích cho các hoạt động chỉnh sửa như lấy một chuỗi dòng trong một tệp (với y [yank] hoặc d [delete]) và "đặt" chúng vào một tệp khác.

Xử lý sau khi chỉnh sửa

Ngoài việc thực hiện các chức năng trước phiên làm việc, Vim cho phép bạn xác định những việc cần làm sau khi bạn đã chỉnh sửa một tệp. Bạn có thể viết các quy trình dọn dẹp để xóa các tệp tạm thời được tích lũy từ quá trình biên dịch hoặc thực hiện chỉnh sửa theo thời gian thực cho tệp trước khi nó được ghi lại vào bộ nhớ. Bạn có toàn quyền tùy chỉnh mọi hoạt động của postedit.

Chỉnh sửa minh bạch

Vim phát hiện và tự động giải nén các tệp lưu trữ hoặc nén. Ví dụ, bạn có thể trực tiếp chỉnh sửa một tệp zip như myfile.tar.gz. Bạn thậm chí có thể chỉnh sửa thư mục. Vim cho phép bạn điều hướng thư mục và chọn tệp để chỉnh sửa bằng các lệnh điều hướng Vim quen thuộc.

Thông tin meta

Vim cung cấp bốn thanh ghi chỉ đọc tiện dụng mà người dùng có thể trích xuất thông tin meta cho các lệnh “put”: tên tệp hiện tại (%), tên tệp thay thế (#), lệnh dòng lệnh cuối cùng được thực thi (:), và văn bản được chèn cuối cùng (., dấu chấm).
This post is licensed under CC BY 4.0 by the author.