Vim Macro
TIL
763
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
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết hơn 2 năm trước
0 4
White
4 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết hơn 1 năm trước
4 0
{{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á!