Moving from NeoVim to Spacemacs
spacemacs
2
vim
20
dotfiles
2
White

Tấn Linh viết ngày 15/03/2018

Một năm trước, mình nghe theo lời đường mật Di cư sang Vim 1 của CTO. Sau một năm xài Vim (thực ra là Neovim) một cách nghiêm túc, lần này mình lại bị dụ dỗ sang Spacemacs. Với những ai chưa biết, Spacemacs là một distribution của Emacs với description là The best editor is neither Emacs nor Vim, it's Emacs and Vim! cho bạn một trải nghiệm Emacs rất tuyệt vời, riêng Vimmer sẽ cảm giác thân thuộc như ở nhà. Bởi vậy, bài viết này nhằm lôi kéo anh em Vimmer sang Spacemacs kẻo mình cô đơn quá :adore:

First impression

Sau một tuần sử dụng Spacemacs, mình thấy một số điểm như sau:

  • UI đẹp, nuột, rất giống hắc cơ
  • Cảm giác nhanh mà nuột hơn Neovim. Trừ việc startup time cực lâu nếu so với vim thì còn lại là tuyệt vời. Nếu muốn giảm thời gian startup time, bạn có thể tham khảo bài viết 2 của lão Huytd
  • Toàn bộ command sẽ bắt đầu bằng leader key. Mặc định là SPC (spacebar) khi sử dụng Vim style hoặc hybrid style, M-m khi sử dụng emacs style. Mình thấy điểm này khá hay khi toàn bộ command bắt nguồn từ một phím cố định, nếu bạn nhỡ quên một chút thôi thì đã có Spacemacs root menu gợi ý với giao diện cực kỳ trực quan. Bạn có thể xem ở screenshot bên dưới.

Spacemacs root

  • Custom Spacemacs đòi hỏi bạn phải vận động tay chân nhiều hơn so với Vim. Tuy nhiên khi cài xong Spacemacs và enable một số layers là mình có thể bơi vào code luôn được rồi. Spacemacs có sẵn go layer cho anh em Gopher luôn.

Installation

Cài đặt Spacemacs khá đơn giản, bạn cần Emacs version 24.4 hoặc cao hơn, sau đó clone repository của Spacemacs về là xong.

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

Mở emacs từ terminal và chờ Spacemacs hoàn thành phần cài đặt là bạn có thể bắt đầu trải nghiệm rồi. Tada….

Screenshot

Migrate from Vim

Về cơ bản, những concept như mode, buffer, plugin .v.v. bên Vim có thì Spacemacs hay nói đúng hơn là Emacs cũng có nhưng với một tên gọi khác. Anh em Vimmer có thể đọc ở bài viết Migration from Vim 3 để hiểu rõ hơn.

Để bắt đầu cấu hình Spacemacs, bạn có thể dùng Vim edit file ~/.spacemacs . Mình đùa thôi, bạn có thể sửa file .spacemacs ngay trong Spacemacs bằng tổ hợp phím SPC f e d và apply modifications bằng tổ hợp SPC f e R. Vô cùng tiện lợi.

Layers trong Spacemacs tương đương với Plugin trong Vim. Bạn dễ dàng enable/disable layers bằng cách comment hoặc uncomment tên layer trong block dotspacemacs-configuration-layers. Ví dụ đây là layer mình đang sử dụng:

dotspacemacs-configuration-layers
   '(
     go
     gtags
     themes-megapack
     imenu-list
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
     ;; <M-m f e R> (Emacs style) to install them.
     ;; ----------------------------------------------------------------
     ;; ivy
     auto-completion
     better-defaults
     emacs-lisp
     git
     markdown
     ;; org
     ;; (shell :variables
     ;;        shell-default-height 30
     ;;        shell-default-position 'bottom)
     ;; spell-checking
     syntax-checking
     ;; version-control
     osx
     )

Hiện tại, Spacemacs có hơn 150 layers 4 chia làm 20 group. Với số lượng layer lớn như vậy, mình tin là thỏa mãn đại đa số nhu cầu của mọi người. Muốn cài đặt layer nào, bạn chỉ việc thêm nó vào block dotspacemacs-configuration-layers và apply để cài đặt là xong. Cực kỳ nhanh gọn phải không nào.

Usage

Nếu bạn không cấu hình linh tinh, mặc định Spacemacs có editing style là vim. Điều này có nghĩa là gì? Anh em Vimmer sẽ thấy thoải mái như ở nhà. Di chuyển, select, copy, paste, undo .. vân vân và vân vân dễ như ăn kẹo.

https://gyazo.com/820e09e1d46e8b4a5fc8042cb3a6e7ab

Nếu bạn không phải là Vimmer hoặc lần đầu tiên sử dụng Spacemacs? Không sao cả, hãy tìm đọc bài viết "Làm quen với Vim trong 5 phút" 5 ở phần References

Khi đã làm quen với các thao tác cơ bản trong bài viết trên, chúng ta cùng tìm hiểu về HelmProjectile. Bạn chắc chắn sẽ dành phần lớn thời gian làm việc với chúng đấy.

a. Helm layer

Helm 6 là một layer tiêu chuẩn mặc định của Spacemacs, vì vậy bạn không cần động tay chân thêm một giây nào nữa để cài đặt nó. Người anh em với HelmIvy nhưng thú thật mình chưa biết nó ngang dọc như nào nên cũng chẳng nói thêm gì được. Nói một cách chính xác, Helm là một completion framework và nếu dùng một mỹ từ dành cho Helm thì nó là bộ não của Spacemacs. Helm được dùng để manage buffer, projects, search results, configuration layers và hàng tá công việc khác..

Ví dụ về vụ tìm kiếm file siêu nhanh, cho phép tìm kiếm đồng thời cả buffer và file.

https://gyazo.com/71d263102b40f3a956fcaff1eb7c5afc

b. Projectile

Projectile là thư viện của Emacs hỗ trợ làm việc với project. Goal của Projectile là nice set of features operating on a project level without introducing external dependencies. Vì vậy, bạn không thấy sự xuất hiện của những thư mục cấu hình theo dạng .vscode hoặc .idea như Visual Code hay IntelliJ. Bạn không còn thi thoảng phải chửi thề: Douma quên ignore folder .vscode rồi!!!. Đối với Projectile, thư mục chứa những tập tin cấu hình đặc biệt chính là project. Git, Mercurial, darcs hay bazaar sẽ được để ý đầu tiên. Ngoài ra còn có SBT, Maven, Bundler .v.v. các bạn tìm hiểu thêm. Nếu muốn Projectile hiểu một thư mục là project, bạn tạo một file rỗng .projectile trong chính thư mục đó.

Những tính năng của Projectile bao gồm:

  • jump to a file in project
  • jump to files at point in project
  • jump to a directory in project
  • jump to a file in a directory
  • jump to a project buffer
  • jump to a test in project
  • toggle between files with same names but different extensions (e.g. .h <-> .c/.cpp, Gemfile <-> Gemfile.lock)
  • toggle between code and its test (e.g. main.service.js <-> main.service.spec.js)
  • jump to recently visited files in the project
  • switch between projects you have worked on
  • kill all project buffers
  • replace in project
  • multi-occur in project buffers
  • grep in project
  • regenerate project etags or gtags (requires ggtags).
  • visit project in dired
  • run make in a project with a single key chord
  • check for dirty repositories

Helpful hotkeys

Như mình đã nói ở trên, tất cả command của Spacemacs đều bắt đầu bằng SPC. Ngoài ra, key binding của Spacemacs cực kỳ dễ nhớ, ví dụ như b cho buffer, p cho project, s cho tìm kiếm .v.v. Tổng hòa hai điều trên, bạn mất chưa tới 30 phút để nhớ làm việc thoải mái với Spacemacs. Trường hợp quên đi nữa, bạn gõ SPC bật Spacemacs root để học thuộc lòng lại từ đầu :trollface:

Mình xin phép liệt kê một số hotkeys mà mình thấy hữu ích:

  • SPC s c : Clear search highlight
  • SPC f t : Toggle Nerdtree
  • SPC b i : Toggle imenu-list (Chỉ khi bạn đã install và enable layer imenu-list. Với những bạn chưa biết thì imenu tương tự như tagbar bên Vim nhưng không xịn bằng)
  • SPC T s : Select theme (Chỉ khi bạn đã install và enable layer themes-megapack)
  • SPC f e d : Modify .spacemacs file
  • SPC f e R : Apply modifications
  • SPC 1 : Switch to window 1 (Khi bạn mở Nerdtree thì nó là window 0)
  • SPC 2 : Switch to window 2
  • SPC b b : Show list buffers
  • SPC b d : Kill current buffer
  • SPC TAB : Switch to previous buffer
  • [ b or ] b : Tương tự như SPC TAB
  • SPC p p : Open project
  • SPC p f : Find files or buffers
  • SPC w / : Split window vertically
  • SPC w - : Split window horizontally
  • SPC w d : Delete active window
  • SPC m g g : Go to definition

Biển trời hotkey biết đâu là bờ, nếu bạn thấy hotkey nào hữu ích, chia sẻ bên dưới phần comment để mình cập nhật cho các bạn khác nữa nhé.

Với những bạn đọc đến hết bài nhưng lại muốn trải nghiệm Vim, có thể tham khảo dotfiles 7 của mình. Hehe

Cuối cùng, bài viết này chỉ duy nhất một mục đích là lôi kéo và rủ rê, mặc dù sau khi đọc lại bài viết mình chẳng thấy nó có gì sexy để lôi kéo được anh em. Tuy vậy, nếu quan tâm có thể comment bên dưới. Rất mong nhận được góp ý từ anh em.

Many thanks,

P/s: Hi vọng năm sau không có bài Di cư từ Spacemacs sang Vim nữa :trollface:

Bài đăng lại từ blog của mình (shameless PR :yum:)


  1. Triết Phạm, Di cư từ Sublime text sang Vim, Tee, Coffe & Code Blog 

  2. Huytd, Chạy spacemacs/emacs với daemon mode, Kipalog 

  3. Migration from Vim, Spacemacs 

  4. Configuration Layers, Spacemacs  

  5. Huytd, Làm quen với vim trong 5 phút, Kipalog 

  6. Helm Layer, Spacemacs 

  7. Tanlinhnd, dotfiles, Github 

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

Tấn Linh

1 bài viết.
13 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
26 8
Lý do viết bài: Mặc dù viết lách không được giỏi, nhưng mà vì muốn sử dụng kipalog API nên mình cũng cố rặn 2 bài viết, đây là bài viết số 1 (a hjh...
Thinh Tran viết 10 tháng trước
26 8
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
13 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á!