03/12/2018, 21:58

Vim và cách xử lý những công việc mang tính lặp lại

Công việc của một lập trình viên thường là phải ngồi viết và sửa code, trong 2 công việc này có rất nhiều những việc mang tính lặp lại. Cho dù đó là sửa một dấu phẩy hay là chuyển một function sang một nơi khác trong file, chúng ta phải lặp lại rất nhiều hành động. Vim là một trình văn bản được ...

Công việc của một lập trình viên thường là phải ngồi viết và sửa code, trong 2 công việc này có rất nhiều những việc mang tính lặp lại. Cho dù đó là sửa một dấu phẩy hay là chuyển một function sang một nơi khác trong file, chúng ta phải lặp lại rất nhiều hành động.


Vim là một trình văn bản được tối ưu cho những công việc mang tính lặp lại. Tính hiệu quả của Vim bắt nguồn từ việc Vim theo dõi những hành động gần đây nhất của người sử dụng, điều này làm Vim có thể thực hiện thay đổi cuối cùng chỉ bằng một nút nhấn. Đây là một sức mạnh vô biên nếu được sử dụng đúng cách, tuy nhiên không phải ai cũng biết cách sử dụng của sức mạnh tiềm ẩn này.

Điểm bắt đầu của chúng ta trong việc tìm hiểu về nguồn sức mạnh này chính từ dấu chấm (.) trong Vim. Một dấu chấm có thể giúp bạn làm mọi việc theo ý của bạn, một dấu chấm có thể tiết kiệm cho bạn thời gian, công sức.

Giả sử, bạn có một file chứ một danh sách các công việc như bên trái, và bạn muốn chuyển nó thành như bên phải.

Job 1                  |                    - Job 1
Job 2                  |->                  - Job 2
Job 3                  |                    - Job 3
Job 4                  |                    - Job 4

Thông thường, bạn sẽ phải chỉ chuột vào đầu dòng của từng Job để thêm 1 dấu gạch và 1 dấu cách cho mỗi dòng. Còn trong Vim, giả sử ta đang ở dòng 1, ta có thể ấn I để đưa con trỏ về đầu dòng và vào Insert Mode, sau đó thêm 1 dấu gạch và 1 dấu cách. Như vậy dòng 1, đã đúng như yêu cầu. Nhưng dòng 2, 3 và 4 sẽ nhanh hơn rất nhiều. Bây giờ, hãy nhấn j để chuyển con trỏ xuống dòng 2, và nhấn .. Chỉ như vậy thôi là dòng 2 đã trở nên đúng với yêu cầu. Tương tự với dòng 3 và dòng 4


Và rồi bạn ghi thêm một số công việc con trong những `Job` đó mà chưa có thời gian format chúng.
Job 1                              |       Job 1
some boring work for Job 1         |         some boring work for Job 1
Job 2                              |       Job 2
Job 3                              |       Job 3
some boring work for Job 3         |->       some boring work for Job 3
another boring work for Job 3      |         another boring work for Job 3
yet another boring work for Job 3  |         yet another boring work for Job 3
Job 4                              |       Job 4

Thông thường, bạn sẽ phải chỉ chuột vào đầu những dòng cần được tab để có thể thụt lề cho chúng, nhưng với Vim, bạn có thể làm việc này một cách nhanh chóng. Giả sử con trỏ của bạn đang ở chữ w tại dòng 2, bạn có thể gõ >> để có thể thụt lề dòng 2 này, tuy nhiên còn dòng 5, 6 và 7 cần phải thụt vào, những dòng này lại càng đơn giản hơn.

Sau khi bạn gõ >>, Vim đã ghi nhớ câu lệnh này để có thể thực hiện nhanh bằng câu lệnh .. Bây giờ, con trỏ vẫn đang ở dòng 2, chữ s sau khi thụt lề, bạn gõ 3j để chuyển sang dòng 5, sau đó ấn 3. và BOOOOM, tận 3 dòng đã thụt lề.

Bên trên là một số ví dụ đơn giản để miêu tả sức mạnh của dấu chấm . trong Vim. Bạn có thể sử dụng dấu chấm này để thực hiện một công việc phức tạp hơn trong Vim.

Trong :help của Vim, dấu chấm này có tác dụng là: lặp lại thay đổi gần nhất với bộ đếm được sử dụng trước dấu chấm.


Như vậy, những thay đổi đơn giản như thụt lề, thêm `-` hoặc như thêm `;` vào cuối câu có thể dùng với dấu chấm. Tuy nhiên những công việc phức tạp hơn thì cần một công cụ cao cấp hơn!!!

Macro chính là công cụ nâng cấp hơn mà chúng ta nhắc đến trong mục 1. Với dấu chấm, ta có thể thực hiện lại 1 thay đổi, nhưng với macro, ta có thể thực hiện lại một cụm các thay đổi. Điều này giúp macro trở nên đặc biệt mạnh mẽ khi có thể giúp ta thực hiện một công việc phức tạp chỉ với một nốt nhạc.

Ví dụ: Bạn có một đoạn code Javascript như bên trái và bạn cần phải chuyển nó về như bên phải

foo = 1                |        let foo = 1;
bar = 'a'              |->      let bar = 'a';
foobar = foo + bar     |        let foobar = foo + bar;

Công việc chỉ đơn giản là thêm chữ let ở đầu mỗi dòng và dấu ; ở cuối mỗi dòng. Việc sử dụng dấu chấm ở đây là không thể vì nó yêu cầu ta phải chỉnh sửa 2 nơi trong cùng một dòng (2 thay đổi).

Và như thường lệ, bản năng của ta sẽ và trỏ chuột vào đầu dòng của từng dòng và thêm let vào từng dòng và sau đó trỏ chuột vào cuối dòng của từng dòng để thêm ;. Hãy tưởng tượng làm việc này với 100 dòng code!!!


May mắn là ta đã có Macro, vị cứu tinh cho những công việc lặp lại buồn tẻ và mệt nhọc!

Để kích hoạt Macro, ta sử dụng lệnh q{register}, register là một chữ cái trên bàn phím (in hoa hoặc in thường) và dãy số, như vậy ta có thể có tới 62 register cho ta thoải mái lựa chọn             </div>
            
            <div class=

0