Vim Macro
TIL
765
vim
22
editor
6
White

Tobi Hoang viết ngày 24/10/2018

Vim Macro

Trong Vim để lặp lại thao tác đã thực hiện trước đó ta sử dụng dấu chấm .. Nhưng nếu muốn lặp lại các chuỗi thao tác phức tạp ta cần sự trợ giúp của macro.

Recording a macro

Macro trong Vim là một tính năng rất hữu dụng khi muốn ghi lại các thao tác sau đó thực thi lại các hành động đó nhiều lần.

Ví dụ:

1 User.create(
2  name:  params["name"].capitalize,
3  age:   params["age"].to_i,
4  email: params["mail"],
5  phone: params["phone_no"]
6 )

Sau khi bạn code xong thì bạn chợt nhận ra rằng dấu " trong thật xấu xí vì vậy bạn muốn đổi thành symbol cho đẹp hơn. Bạn có thể dùng macro như sau:

  • j Xuống dòng 2
  • qq Tạo một macro với q register
  • E Xuống cuối dòng 2
  • F" Để lùi lại dấu " trước đó
  • x Để xoá dấu ngoặc kép hiện tại
  • F" Để lùi lại dấu " tiếp theo
  • x Để xoá dấu ngoặc kép còn lại
  • i Để chuyển sang chế độ insert
  • : Thêm dấu :
  • jj or Esc để thoát chế độ insert
  • q Để kết thúc viết ghi q register
  • 0 Trở về đầu dòng
  • vG Để chọn toàn bộ đoạn code trên.
  • :'<.'>norm @q để apply macro register vừa tạo. Done!
1 User.create(
2   name:  params[:name].capitalize,
3   age:   params[:age].to_i,
4   email: params[:mail],
5   phone: params[:phone_no]
6 )

Edit an Existing Vim Macro

Bạn vừa tạo xong một macro phức tạp trong vim và stop recording. Tuy nhiên, bạn chợt nhận ra rằng bạn vừa quên dấu ^ trong macro. Cho nên bạn có ý định tạo lại lần nữa mặc dù nó hơi tốn công. Liệu cách nào khác để không phải tạo lại từ đầu hay không. Ta có 2 cách dưới đây:

Yanking into a register:

  • "qp Lệnh cho phép in ra tất cả các lệnh trong macro vừa mới đăng kí ra ví trị hiện tại của con trỏ.

  • I Để chuyển sang chế độ insert đầu dòng.

  • Add thêm dòng lệnh còn thiếu ví dụ ^ vào tập lệnh macro

  • Thoát khỏi chế độ insert. Dùng <Escape> chẳng hạn. Mình thì bind key jj

  • Lưu thay đổi tập lệnh macro hiện tại với "qyy`

  • dd Để xoá dòng tập lệnh chúng ta vừa in tạm ra để chỉnh sửa.

Editing the register visually

  • Cách này không phải paste macro tạm bợ ra file mà chỉnh sửa trực tiếp ở phần hiển cmd bên dưới.

  • :let @q=' Để mở q register. Nhớ đừng enter

  • Tiếp tiếp gõ <Cntl-r><Cntl-r>q để past content của q.

  • Di chuyển đến ví trí cần chỉnh sửa sau đó thêm dấu (^).

  • Thêm dấu ' để đóng register

  • <Enter> để hoàn thành chỉnh sửa macro.

Ref

TobiHoang 24-10-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Tobi Hoang

4 bài viết.
3 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
6 0
Create a Raw Bitcoin Transaction Mục tiêu Tạo ra một bitcoin transaction gửi bitcoin từ 1 địa chỉ A sang địa chỉ B. Hiểu được cấu tạo của raw t...
Tobi Hoang viết hơn 2 năm trước
6 0
White
5 5
Tình cờ đọc được một issue trên repo (Link) thì biết được cách tạo một backdoor khá hay nên quyết định tìm hiểu. Phiên bản chứa backdoor được rele...
Tobi Hoang viết hơn 1 năm trước
5 5
White
2 0
Tiêu đề bài viết không ngoài gì khác ngoài mục đích câu view, nội dung không có gì cao siêu cả. What is the cut command in UNIX? cut là câu lệnh ...
Tobi Hoang viết hơn 2 năm trước
2 0
Bài viết liên quan
White
32 6
Lâu lâu lại thấy anh hùng trong thiên hạ post 1 bài có dạng "Switch to VIM...", điều này cho thấy sức quyến rũ của VIM là rất lớn, như một cô nàng ...
Dong Nguyen viết gần 3 năm trước
32 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
3 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!