Cho đến nay, trong loạt bài viết này nói về các plugin liên quan đến lập trình cho Vim, chúng ta đã thảo luận về những điều cơ bản khi cài đặt plugin Vim bằng trình quản lý plugin Pathogen và đề cập đến tổng cộng ba plugin - cụ thể là Tagbar, delimitMate và Syntastic. Bây giờ, trong phần thứ ba và cũng là phần cuối cùng này, chúng ta sẽ thảo luận về một plugin rất hữu ích khác có tên là a.vim.
Xin lưu ý rằng tất cả các ví dụ, lệnh và hướng dẫn được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 16.04 và phiên bản Vim mà chúng tôi sử dụng là 7.4.
Mặc dù dễ dàng chuyển đổi giữa các tệp khi sử dụng IDE dựa trên GUI (vì bạn chỉ cần nhấp chuột vài lần), mọi thứ trở nên hơi khó khăn nếu bạn sử dụng IDE dòng lệnh như Vim. Tuy nhiên, như bạn đã đoán được, hiện có một plugin - có tên là a.vim - giúp bạn dễ dàng hơn, đặc biệt là khi chuyển đổi giữa các tệp nguồn và tệp tiêu đề.
Trước khi chuyển sang cách sử dụng, cần đề cập rằng quy trình cài đặt plugin này khác với cách chúng ta cài đặt các plugin khác được thảo luận trong loạt bài viết này. Sau đây là các bước liên quan đến trường hợp này:
Sử dụng plugin rất đơn giản: Tất cả những gì bạn phải làm là chạy lệnh :A - nếu tệp hiện tại là tệp nguồn (ví dụ: test.c), plugin sẽ mở tệp tiêu đề tương ứng (test.h) cho bạn (ngược lại cũng đúng).
Rõ ràng là không phải lúc nào cũng tồn tại một tệp tương ứng có cùng tên. Trong những trường hợp này, chạy :A sẽ tạo một tệp mới có tên đó. Ví dụ, nếu test.h không tồn tại, một tệp có tên đó sẽ được tạo và mở cho bạn.
Trong trường hợp bạn muốn vô hiệu hóa hành vi này, bạn có thể đặt biến g:alternateNoDefaultAlternate (cung cấp cho nó một giá trị khác không) trong tệp .vimrc có trong thư mục gốc của bạn.
Tiếp theo, việc tham chiếu đến một tệp tiêu đề không tương ứng từ một tệp nguồn cũng khá bình thường. Ví dụ, nếu bạn đang ở trong test.c và muốn chuyển sang một tệp tiêu đề khác (ví dụ như mem.h) chứ không phải test.h, thì bạn có thể thực hiện điều đó bằng cách chạy lệnh :IH <filename> trong Vim. Không cần phải nói, bạn sẽ phải thay thế <filename> với tên thực tế của tệp bạn cần mở.
Cho đến bây giờ, bất kỳ chức năng nào chúng ta thảo luận đều giả định rằng tệp bạn định mở nằm trong cùng thư mục với tệp hiện tại. Tuy nhiên, như bạn sẽ đồng ý, không phải lúc nào cũng vậy. Ý tôi muốn nói là trong nhiều dự án, vị trí của các tệp nguồn và các tệp tiêu đề tương ứng không phải lúc nào cũng là cùng một thư mục.
Để xử lý các tình huống như vậy, bạn cần sử dụng biếng:alternateSearchPath. Đây là những gì tài liệu chính thức nóivề biến này:
"Plugin này cho phép định cấu hình đường dẫn tìm kiếm mà nó sử dụng để định vị các tệp nguồn và tiêu đề. Đường dẫn tìm kiếm được chỉ định bằng cách đặt biến g:alternateSearchPath. Cài đặt mặc định như sau:"
"Điều này chỉ ra rằng tệp tương ứng sẽ được tìm kiếm trong ../source, ../src. ../include và ../inc, tất cả đều liên quan đến tệp hiện tại đang được chuyển đổi. Giá trị của biến g:alternateSearchPath chỉ đơn giản là danh sách các tiền tố và thư mục được phân tách bằng dấu phẩy. Tiền tố "sfr:" chỉ ra rằng đường dẫn là liên quan đến tệp. Các tiền tố khác là "wdr:" chỉ ra rằng thư mục là liên quan đến thư mục làm việc hiện tại và "abs:" chỉ ra rằng đường dẫn là tuyệt đối. Nếu không chỉ định tiền tố nào, "sfr:" được coi là."
Nếu tất cả các tính năng đã đề cập ở trên của plugin này đã khiến bạn phải thốt lên "wow", thì tôi xin nói với bạn rằng đó chưa phải là tất cả. Một chức năng cực kỳ hữu ích khác mà plugin cung cấp là khả năng chia màn hình Vim của bạn để cả tệp nguồn và tệp tiêu đề tương ứng có thể được xem đồng thời.
Hơn nữa, bạn có thể chia màn hình theo cả chiều ngang và chiều dọc, tùy thuộc vào cách phù hợp nhất với bạn. Sử dụng lệnh :AS để chia màn hình theo chiều ngang và lệnh :AV để chia màn hình theo chiều dọc.
Sử dụng lệnh :A để chuyển đổi giữa các tệp đã mở.
Plugin này cũng cho phép bạn mở một tệp tương ứng trong một tab riêng trong cùng một cửa sổ Vim. Bạn có thể thực hiện việc này bằng cách chạy lệnh :AT.
Tất nhiên, giống như :AV, :AS và :AT, bạn cũng có thể sử dụng các lệnh :IHV, :IHS và :IHT.
Tất nhiên, chúng tôi chỉ tập trung vào phần lập trình ở đây. Đối với những ai sử dụng Vim làm trình soạn thảo văn bản hàng ngày, bạn nên biết rằng có rất nhiều plugin bổ sung chức năng chỉnh sửa văn bản của Vim và làm cho nó thậm chí còn tốt hơn. Nhưng chúng ta sẽ để lại cuộc thảo luận này cho một ngày khác.
Xin lưu ý rằng tất cả các ví dụ, lệnh và hướng dẫn được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 16.04 và phiên bản Vim mà chúng tôi sử dụng là 7.4.
A.vim
Nếu bạn tham gia phát triển phần mềm và làm việc với các ngôn ngữ lập trình như C và C++, bạn sẽ đồng ý rằng thực tế là không thể biết được bạn phải chuyển đổi giữa các tệp nguồn và tệp tiêu đề bao nhiêu lần. Ý tôi muốn nói là đây là một nhiệm vụ rất cơ bản được thực hiện rất thường xuyên.Mặc dù dễ dàng chuyển đổi giữa các tệp khi sử dụng IDE dựa trên GUI (vì bạn chỉ cần nhấp chuột vài lần), mọi thứ trở nên hơi khó khăn nếu bạn sử dụng IDE dòng lệnh như Vim. Tuy nhiên, như bạn đã đoán được, hiện có một plugin - có tên là a.vim - giúp bạn dễ dàng hơn, đặc biệt là khi chuyển đổi giữa các tệp nguồn và tệp tiêu đề.
Trước khi chuyển sang cách sử dụng, cần đề cập rằng quy trình cài đặt plugin này khác với cách chúng ta cài đặt các plugin khác được thảo luận trong loạt bài viết này. Sau đây là các bước liên quan đến trường hợp này:
- Trước tiên, bạn cần tải xuống một vài tệp (a.vim và alternate.txt), bạn có thể thực hiện bằng cách tiêu đề tại đây.
- Tiếp theo, tạo các thư mục sau: ~/.
vim/bundle/avim
, ~/.vim/bundle/avim/doc
, ~/.vim/bundle/avim/plugin
và ~/.[I]vim/bundle/autoload[/I].
- Sau khi tạo xong thư mục, hãy đưa a.vim vào ~/.vim/bundle/avim/plugincũng như~/.vim/bundle/autoload và alternate.txt thành ~/.vim/bundle/avim/doc.
Sử dụng plugin rất đơn giản: Tất cả những gì bạn phải làm là chạy lệnh :A - nếu tệp hiện tại là tệp nguồn (ví dụ: test.c), plugin sẽ mở tệp tiêu đề tương ứng (test.h) cho bạn (ngược lại cũng đúng).
Rõ ràng là không phải lúc nào cũng tồn tại một tệp tương ứng có cùng tên. Trong những trường hợp này, chạy :A sẽ tạo một tệp mới có tên đó. Ví dụ, nếu test.h không tồn tại, một tệp có tên đó sẽ được tạo và mở cho bạn.
Trong trường hợp bạn muốn vô hiệu hóa hành vi này, bạn có thể đặt biến g:alternateNoDefaultAlternate (cung cấp cho nó một giá trị khác không) trong tệp .vimrc có trong thư mục gốc của bạn.
Tiếp theo, việc tham chiếu đến một tệp tiêu đề không tương ứng từ một tệp nguồn cũng khá bình thường. Ví dụ, nếu bạn đang ở trong test.c và muốn chuyển sang một tệp tiêu đề khác (ví dụ như mem.h) chứ không phải test.h, thì bạn có thể thực hiện điều đó bằng cách chạy lệnh :IH <filename> trong Vim. Không cần phải nói, bạn sẽ phải thay thế <filename> với tên thực tế của tệp bạn cần mở.
Cho đến bây giờ, bất kỳ chức năng nào chúng ta thảo luận đều giả định rằng tệp bạn định mở nằm trong cùng thư mục với tệp hiện tại. Tuy nhiên, như bạn sẽ đồng ý, không phải lúc nào cũng vậy. Ý tôi muốn nói là trong nhiều dự án, vị trí của các tệp nguồn và các tệp tiêu đề tương ứng không phải lúc nào cũng là cùng một thư mục.
Để xử lý các tình huống như vậy, bạn cần sử dụng biếng:alternateSearchPath. Đây là những gì tài liệu chính thức nóivề biến này:
"Plugin này cho phép định cấu hình đường dẫn tìm kiếm mà nó sử dụng để định vị các tệp nguồn và tiêu đề. Đường dẫn tìm kiếm được chỉ định bằng cách đặt biến g:alternateSearchPath. Cài đặt mặc định như sau:"
Mã:
g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc'
Nếu tất cả các tính năng đã đề cập ở trên của plugin này đã khiến bạn phải thốt lên "wow", thì tôi xin nói với bạn rằng đó chưa phải là tất cả. Một chức năng cực kỳ hữu ích khác mà plugin cung cấp là khả năng chia màn hình Vim của bạn để cả tệp nguồn và tệp tiêu đề tương ứng có thể được xem đồng thời.
Hơn nữa, bạn có thể chia màn hình theo cả chiều ngang và chiều dọc, tùy thuộc vào cách phù hợp nhất với bạn. Sử dụng lệnh :AS để chia màn hình theo chiều ngang và lệnh :AV để chia màn hình theo chiều dọc.
Sử dụng lệnh :A để chuyển đổi giữa các tệp đã mở.
Plugin này cũng cho phép bạn mở một tệp tương ứng trong một tab riêng trong cùng một cửa sổ Vim. Bạn có thể thực hiện việc này bằng cách chạy lệnh :AT.
Tất nhiên, giống như :AV, :AS và :AT, bạn cũng có thể sử dụng các lệnh :IHV, :IHS và :IHT.
Kết luận
Mặc dù có nhiều plugin Vim liên quan đến lập trình có sẵn để sử dụng, nhưng những plugin mà chúng tôi đã thảo luận trong loạt bài gồm ba phần này sẽ đủ để giúp bạn hình dung được trình soạn thảo này mạnh mẽ như thế nào nếu bạn bật đúng plugin cho công việc phát triển phần mềm của mình.Tất nhiên, chúng tôi chỉ tập trung vào phần lập trình ở đây. Đối với những ai sử dụng Vim làm trình soạn thảo văn bản hàng ngày, bạn nên biết rằng có rất nhiều plugin bổ sung chức năng chỉnh sửa văn bản của Vim và làm cho nó thậm chí còn tốt hơn. Nhưng chúng ta sẽ để lại cuộc thảo luận này cho một ngày khác.