#vim
#macro
#recursion
#automation
Tạo một macro đệ quy để định dạng lại các khối code hoặc văn bản có độ sâu lồng nhau thay đổi.
Bạn có một tệp văn bản chứa các dòng liệt kê cần được thụt đầu dòng theo cấp độ cha-con dựa trên nội dung của chúng (ví dụ: các dòng không có tiền tố là cha, các dòng có tiền tố '-' là con). Hãy viết một Vim macro trong thanh lệnh (command-line) sử dụng tính năng đệ quy (gọi chính macro đó bên trong macro) để tự động thụt đầu dòng cho toàn bộ tệp. Macro phải dừng lại tự động khi đến cuối tệp. Mô tả các phím tắt và logic đệ quy bạn đã sử dụng.
#vim
#regex
#sub-replace
#text-processing
Sử dụng biểu thức \= trong lệnh :s để thay đổi thứ tự các từ và xử lý chuỗi.
Cho một danh sách các dòng có định dạng 'LastName, FirstName Age'. Hãy sử dụng lệnh thay thế của Vim (:s) kết hợp với biểu thức thay thế (sub-replace expression \=) để đảo ngược thứ tự thành 'FirstName LastName (Age)'. Bạn cần sử dụng các hàm xử lý chuỗi như split(), join() và submatch() trong Vimscript ngay bên trong lệnh thay thế. Cung cấp chính xác lệnh :s bạn đã thực hiện.
#vim
#visual-block
#editing
#columns
Thao tác chỉnh sửa theo cột phức tạp trên nhiều dòng đồng thời.
Bạn có một danh sách 20 biến JavaScript được khai báo trên các dòng riêng biệt (ví dụ: let a;). Nhiệm vụ là chuyển đổi chúng thành một mảng (ví dụ: ['a', 'b', ...]). Sử dụng Chế độ Khối trực quan (Ctrl-v) để: 1. Chèn dấu nháy đơn vào đầu và cuối mỗi tên biến. 2. Xóa dấu chấm phẩy ở cuối mỗi dòng. 3. Thêm dấu phẩy ở cuối mỗi dòng trừ dòng cuối cùng. Mô tả quy trình các bước bạn thực hiện với Visual Block.
#vim
#global-command
#macro
#regex
Chạy macro chỉ trên các dòng thỏa mãn một mẫu regex cụ thể.
Trong một tệp log hỗn hợp, bạn cần xóa tất cả các dòng có chứa từ 'ERROR', nhưng trước khi xóa, bạn muốn sao chép (yank) dòng đó vào thanh ghi 'a' để lưu trữ. Sử dụng lệnh :global (hoặc :g) kết hợp với một lệnh bình thường (normal command) hoặc macro để thực hiện việc này chỉ trên các dòng khớp với từ 'ERROR'. Viết ra chính xác lệnh :g bạn sẽ sử dụng.
#vim
#text-objects
#vimrc
#configuration
Tạo các đối tượng văn bản (text objects) mới trong vimrc để thao tác nhanh hơn.
Hãy định nghĩa một đối tượng văn bản tùy chỉnh cho phép bạn chọn (xóa, thay đổi, sao chép) toàn bộ nội dung bên trong một cặp dấu mở ngoặc đơn '(' và đóng ngoặc đơn ')' tương ứng gần nhất, bao gồm cả chính dấu ngoặc đơn đó (đây là hành vi khác với i( và a( mặc định). Viết đoạn mã Vimscript cần thêm vào file .vimrc để tạo phím tắt cho đối tượng này (ví dụ: dùng phím 'e').
#vi
#vim
#macro
#automation
#text-editing
Tạo một macro để xử lý định dạng lại danh sách dữ liệu phức tạp và áp dụng đệ quy.
Hãy sử dụng vi để thực hiện tác vụ sau: Giả sử bạn có một danh sách 50 dòng có định dạng 'Họ, Tên, Tuổi'. Nhiệm vụ của bạn là ghi lại một macro vào register 'a' để chuyển đổi định dạng này thành 'Tên [Tuổi] - Họ'. Sau khi ghi macro xong, hãy áp dụng macro đó cho tất cả 50 dòng còn lại chỉ sử dụng một lệnh lặp. Hãy mô tả chi tiết các phím tắt bạn đã sử dụng để ghi macro và cách chạy nó trên phạm vi dòng.
#vi
#vim
#registers
#clipboard
#buffer
Thao tác cắt, sao chép và dán văn bản giữa các vùng khác nhau sử dụng các register có tên cụ thể.
Trong vi, bạn đang mở một file cấu hình lớn. Hãy thực hiện các bước sau mà không làm mất nội dung trong clipboard mặc định: 1. Xác định một đoạn cấu hình ở đầu file và sao chép nó vào named register 'c'. 2. Di chuyển xuống cuối file, xóa một đoạn văn bản lớn khác và lưu nó vào named register 'd'. 3. Di chuyển đến dòng giữa file, dán nội dung từ register 'c' vào đó. 4. Sau đó, hoán đổi nội dung của register 'c' và register 'd'. Giải thích cách bạn truy cập và quản lý các register này.
#vi
#vim
#text-objects
#editing
#productivity
Thay đổi nội dung bên trong các cặp dấu ngoặc hoặc tag mà không cần di chuyển con trỏ thủ công.
Bạn đang chỉnh sửa một file mã nguồn HTML chứa nhiều đoạn code lồng nhau. Con trỏ của bạn đang nằm ở bất kỳ đâu bên trong một thẻ <div> cụ thể mà chứa nhiều nội dung. Hãy mô tả cách sử dụng text objects trong vi để: 1. Xóa toàn bộ nội dung bên trong thẻ <div> đó nhưng giữ lại các thẻ mở và đóng. 2. Thay thế nội dung của chuỗi nằm trong dấu ngoặc kép gần nhất mà con trỏ đang chạm tới bằng một chuỗi mới. Hãy liệt kê chính xác các tổ hợp phím cho từng thao tác text object này.
#vi
#vim
#regex
#search-replace
#pattern-matching
Sử dụng lệnh substitute với biểu thức chính quy phức tạp để tái cấu trúc mã nguồn.
Sử dụng lệnh :s trong vi để giải quyết vấn đề sau: Bạn có một danh sách các biến được viết theo kiểu snake_case (ví dụ: my_variable_name). Hãy viết một lệnh tìm kiếm thay thế toàn cầu (global substitute) để chuyển đổi tất cả chúng sang kiểu camelCase (ví dụ: myVariableName) trong toàn bộ file. Lệnh cần phải xử lý chính xác các dấu gạch dưới và đảm bảo ký tự sau dấu gạch dưới được chuyển thành chữ hoa. Hãy cung cấp cú pháp chính xác của lệnh này.
#vi
#vim
#visual-block
#column-edit
#multiline
Chèn và xóa text theo chiều dọc trên nhiều dòng đồng thời.
Bạn cần thêm một dòng comment ở đầu mỗi hàm trong một file mã nguồn. Giả sử mỗi hàm bắt đầu bằng từ khóa 'def' hoặc 'function'. Hãy mô tả quy trình sử dụng chế độ Visual Block trong vi để: 1. Chọn cột đầu tiên của 20 dòng liên tiếp bắt đầu từ con trỏ hiện tại. 2. Chèn chuỗi '# TODO: ' vào đầu mỗi dòng được chọn. 3. Sau đó, sử dụng Visual Block để xóa 3 ký tự cuối cùng của mỗi dòng trong một khối dữ liệu 10x10. Giải thích cách chuyển sang chế độ này và thực hiện thao tác chèn/xóa.
#vi
#vim
#window-management
#buffers
#workflow
Điều hướng, chia tách và chuyển đổi buffer giữa các cửa sổ khác nhau hiệu quả.
Bạn đang chỉnh sửa 3 file khác nhau: main.c, utils.h và data.txt. Hãy mô tả các bước sử dụng các lệnh Ex của vi để: 1. Mở cả 3 file này vào buffers. 2. Chia màn hình ngang làm 3 phần (split windows) để hiển thị đồng thời cả 3 buffers. 3. Di chuyển buffer hiển thị utils.h sang cửa sổ trên cùng và buffer main.c sang cửa sổ giữa. 4. Đóng cửa sổ hiển thị data.txt nhưng xóa buffer đó hoàn toàn khỏi bộ nhớ. Hãy cung cấp chuỗi các lệnh bạn sử dụng.
#co-ban
#che-do
Giải thích sự khác biệt giữa hai chế độ cơ bản và cách chuyển đổi.
Giải thích cho người mới bắt đầu về trình soạn thảo vi: Tại sao khi mở tệp tin tôi không thể gõ chữ ngay lập tức? Phím nào cần nhấn để bắt đầu nhập văn bản và phím nào để quay lại trạng thái ban đầu?
#luu
#thoat
Hướng dẫn các lệnh cơ bản để lưu thay đổi hoặc thoát chương trình.
Tôi đang sử dụng vi để sửa tệp cấu hình. Hãy cho tôi biết cú pháp chính xác trong chế độ dòng lệnh cuối cùng để thực hiện các hành động sau: 1. Lưu tệp và thoát ra. 2. Thoát ra mà không lưu thay đổi.
#di-chuyen
#phim-tat
Sử dụng các phím hjkl và các phím mũi tên để di chuyển.
Tôi muốn di chuyển con trỏ trong vi mà không cần dùng chuột để nhanh hơn. Hãy liệt kê các phím tương ứng để di chuyển lên, xuống, trái, phải theo cách của người dùng vi chuyên gia.
#chinh-sua
#van-ban
Phân biệt sự khác nhau giữa các phím i, a và o.
Trong vi, tôi cần thêm văn bản vào tệp. Hãy giải thích sự khác biệt giữa việc nhấn phím 'i' để chèn, phím 'a' để thêm vào sau, và phím 'o' để mở dòng mới bên dưới.