Được Và Mất Gì Khi Sử Dụng Vim? - RootOnChair

Chuyển đến nội dung chính

Được và mất gì khi sử dụng Vim?

Nếu tựa đề bài viết làm bạn nghĩ tới một sản phẩm thân thiện trong nhà vệ sinh của các hộ gia đình thì bạn đã lầm. Vim mà tôi nhắc tới ở đây là một text editor được yêu thích bởi nhiều lập trình viên bên cạnh VSCode, Sublime Text hay Notepad. (tôi đùa vụ Notepad đấy)

Vim là gì?

Vim là viết tắt của Vi-iMproved, có nghĩa là một phiên bản cải tiến của Vi, một text editor khác, là tên được lấy từ 2 chữ cái đầu của từ Visual. Nói thẳng ra thì những lập trình viên có cách đặt tên thật lạ nhưng chúng ta phải chấp nhận thôi. Và đây chính là hình ảnh của Vim mà tôi nhắc tới. À, thật ra là, đây mới là hình ảnh của Vim trên máy tôi

Sự đặc biệt của Vim

Trước đây, khi bắt đầu học Python, một ngôn ngữ lập trình thông dịch khiến việc chạy code từ command line là một cách dễ dàng và nhanh gọn hơn thay vì phải sử dụng một IDE và chờ đợi nó cài đặt các kiểu. Tôi cũng cần chọn một text editor phù hợp cho việc viết code. Không phủ nhận rằng VSCode của Microsoft rất tuyệt vời và hữu dụng, tôi đã sử dụng nó một thời gian và rất thích nó. Nhưng không may, Vim mới chính là text editor mà tôi muốn gắn bó lâu dài. Vậy, Vim có gì mà làm cho nó đặt biệt đến thế. Đây là những gì tôi đúc kết được sau một thời gian sử dụng nó.

Nó xấu kinh hồn

Thật ra, cả hai tấm hình ở trên đều là giao diện của Vim, khác nhau ở chỗ bức ảnh đầu tiên chính là giao diện lần đầu tiên tôi mở nó lên và bức ảnh thứ hai là giao diện sau khi tôi đã "trang trí" cho nó một chút. Tại sao tôi lại nói đến việc này? Cái tôi muốn nhấn mạnh ở đây là tính tùy biến cao của Vim, người dùng có thể làm Vim trông như thế nào tùy ý họ muốn. Bạn có thể nhìn 10 lập trinh viên khác nhau sử dụng Vim và không một ai có Vim giống nhau cả. Mỗi người đều có một cách "trang trí" Vim khác nhau và điều đó khiến cho text editor của họ là độc nhất. Và các lập trình viên thì lại thích điều này.

Nó nhanh và nhẹ

Nếu bạn có vim, bạn chỉ cần gõ một lệnh vim <tên file> và phần mềm sẽ hiện lên ngay lập tức. Một trong những lý do khiến tôi chuyển từ VSCode sang Vim đó chính là thời gian đợi. Khi VSCode khởi động sẽ là một loạt chờ update và khởi động lại, tôi biết nó là cần thiết để có một phầm mềm ổn dịnh nhưng nó cũng làm phiền tôi khi những gì tôi cần chỉ là nhanh chóng chỉnh sửa file.

Quên con chuột của bạn đi

Nếu bạn thấy một lập trình viên đang làm việc với một con chuột lật ngửa thì bạn cũng có thể phần nào chắc chắn rằng anh ta sử dụng Vim đấy. Những thao tác trong Vim như di chuyển con trỏ, tô đen hay copy paste đều được làm thông qua bàn phím. Con chuột của bạn sẽ gần như ... vô dụng khi làm việc với Vim. Cũng chính vì thế nên bạn cũng phải học một vài lệnh cơ bản để có thể làm được điều mình muốn. Bao gồm cả việc thoát ra khỏi Vim thay vì mắc kẹt trong đó. (Nhân tiện luôn, đó là :q) Đừng như anh chàng này.

Quá trình học Vim

Lúc đầu, tôi thấy khó chịu và có đôi chút chậm lại khi phải nhớ lệnh nào để xóa, lệnh nào để tiến hành tìm kiếm hay copy và paste. Đó là điều bình thường và tôi cũng tin rằng bạn sẽ trải qua nó trong quãng thời gian đầu. Nhưng cái gì cũng có giá của nó, khi nắm được ngôn ngữ của Vim, bạn sẽ thấy mình làm được những những công việc edit phức tạp một cách nhanh chóng trong khi bạn sẽ mất nhiều thời gian hơn với những text editor khác.
Tôi đã làm một biểu đồ nhỏ để biểu thị cho sự tương quan này

Tính năng đa dạng

Ngoài tính năng syntax highlighting đã được hỗ trợ sẵn trong Vim, bạn có thể thêm các tính năng mới cho Vim thông qua các plugin của cộng đồng. Tôi thấy việc này khiến Vim không thua gì VSCode hay thậm chí là IDE khi bạn có thể kiếm được các plugin cung cấp những tính năng có trong IDE.

Dễ dàng vận chuyển

Khi bạn cài lại hệ điều hành hoặc mua máy mới thì việc cài đặt lại text editor như cũ sẽ khiến bạn mất kha khá thời gian. Nhưng với Vim, mọi cấu hình của bạn đều từ file .vimrc và bạn có thể đơn giản là copy file này qua máy mới để có Vim cũ của bạn.

Và còn xa hơn nữa

Tôi dường như cũng chỉ đang ở lưng chừng đâu đó trong việc khai phá hết tiềm năng của text editor này. Nhưng những gì tôi đã trải nghiệm thì không thể chối cãi. Quá trình học ngôn ngữ của Vim, tìm hiểu cách cài đặt các plugin đã khiến tôi bước ra khỏi cùng an toàn của mình và biết được thêm nhiều thứ mới như Unix và Bash, những thứ mà tôi không thể học được nếu cứ dính với những phần mềm phục vụ sẵn mọi thứ cho mình. Đúng là sẽ có khoảng thời gian khó khăn đấy. Nhưng cũng chính vì những lý do đó, tôi muốn thuyết phục bạn cho Vim một cơ hội để thay đổi trải nghiệm của bạn.

Kết

Còn nhiều thứ khác tôi không nhắc đến về những tính năng khác của Vim như Key Binding hay chia màn hình trong Vim chủ yếu là vì tôi vẫn chưa có ấn tượng nhất định với các tính năng này. Có thể tôi sẽ viết thêm về chúng nếu nhận định của tôi thay đổi. Nhưng quan trọng hơn, nếu bạn đã đọc đến đây và muốn bắt đầu học Vim thì trên Medium có một bài viết phù hợp dành cho bạn đấy. Link: https://medium.com/actualize-network/how-to-learn-vim-a-four-week-plan-cd8b376a9b85

Nhận xét

Đăng nhận xét

Bài đăng phổ biến từ blog này

Độc lập tuyến tính và phụ thuộc tuyến tính

Hình ảnh Chào mọi người! Hôm nay, mình sẽ nói về một thứ căn bản của căn bản nhất của Đại số tuyến tính đó là phụ thuộc tuyến tính và độc lập tuyến tính. Đây là khái niệm mình thấy làm nền tảng rất chắc để giải thích những lý thuyết khác của môn học này. Vậy thế nào là phụ thuộc hay độc lập tuyến tính? Về định nghĩa toán học, chúng được nêu như sau được nêu ra như sau: "Một tập hợp các vector được cho là phụ thuộc tuyến tính nếu ít nhất một vector có thể được biểu diễn dưới dạng tổ hợp tuyến tính của các vector còn lại. Nếu chúng không thể được biểu diễn dưới dạng tổ hợp tuyến tính, thì ta gọi những vector này độc lập tuyến tính với nhau." Tuy nhiên cách giải thích này vẫn còn khá hàn lâm. Hãy chia nhỏ nó ra và giải thích từng phần một theo một cách dễ hiểu hơn ở phần tiếp theo. Tổ hợp tuyến tính Giả sử chúng ta có 3 vector 𝐚 \boldsymbol{a} , 𝐛 \boldsymbol{b} , 𝐜 \boldsymbol{c} và để cho đơn giản, mình sẽ cho chúng thuộc ℝ 2 \mathbb{R}^2 . 𝐚 = [ 1 0 ] 𝐛 = [ 2 1 ] 𝐜 ... More »

Thuật toán tính lũy thừa nhanh. Giải thích một cách đơn giản

Hình ảnh Khi được yêu cầu viết một hàm tính lũy thừa. Bạn sẽ làm như thế nào? Đáp án khá đơn giản phải không, chỉ với một vòng lặp for  thì có thể giải quyết tất cả. Nhưng như vậy liệu đã tối ưu chưa? Gần đây mình có xem qua một vài chương của cuốn Nhập môn lập trình  và tìm thấy một vài điều thú vị. Trong đó, có phương pháp tính lũy thừa nhanh mà mình muốn chia sẻ lại. Cuốn sách Nhập môn Lập trình Phương pháp thông thường Với đề bài trên, cách làm dễ nhất là: Để dễ dàng thử độ hiệu quả của thuật toán, mình dùng kiểu dữ liệu int64_t  tức kiểu số nguyên sử dụng 64 bit ( 8 byte ) để chứa dữ liệu và kiểu long tức kiểu số nguyên sử dụng 32 bit ( 4 byte ) để chứa dữ liệu. Nếu các bạn đã biết về phân tích độ phức tạp của thuật toán thì độ phức tạp của thuật toán trên là O(n) , có nghĩa là nếu n càng lớn thì thời gian tính toán xong của ta càng lâu. Nếu các bạn cho hàm trên chạy với n = 1 000 000 000  (1 tỷ cho bạn nào lười đếm). Máy mình chạy mất xấp xỉ 8 ... More »

Hướng dẫn đăng ký khóa học trên Coursera và edX miễn phí

Hình ảnh Chào các bạn, cũng sắp Tết rồi và chắc mọi người rất mong ngóng khoảng thời gian nghỉ Tết phía trước để bắt đầu kế hoạch "ăn-ngủ-chơi" của mình. Được nghỉ mấy tuần liền mà có vài việc cứ làm hoài cũng chán phải không? Sao chúng ta không tận dụng thời gian rảnh rỗi đó để học hỏi thêm một điều gì đó mới mẻ, tự nâng cấp kiến thức của bản thân trong khi mà không bị áp lực từ việc học tập hay đi làm. Nếu như bạn có ý định như vậy vào kỳ nghỉ này, hãy đọc bài viết này. Giới thiệu về Coursera và edX Cả edX và Coursera đều là nền tảng cung cấp các khóa học trực tuyến về nhiều lĩnh vực từ các trường đại học danh tiếng trên thế giới. Mục tiêu của cả hai tổ chức này đều giống nhau đó là mang kiến thức từ các trường đại học ra toàn thế giới, khiến chúng dễ dàng được tiếp cận bởi bất kỳ ai. Trong đó, Coursera được sáng lập bởi hai giáo sư Stanford là Andrew Ng và Daphne Koller vào năm 2012. Cũng vào tháng 5 năm đó, hai trường đại học danh tiếng thế giới là Harvard và M... More » About me

Phạm Hồng Vinh

I love technology, programming and reading. Sometimes, I write blog to share what I learnt. More about me
Trang Facebook
RootonChair Blog

Chủ đề

AI4 Book5 Linear Algebra2 Machine Learning14 Nhập môn Machine Learning10 programming10 Root talk3 Sharing15

Theo tháng

  • 2021 3
    • tháng 9 2021 2
    • tháng 8 2021 1
  • 2020 4
    • tháng 7 2020 1
    • tháng 2 2020 2
    • tháng 1 2020 1
  • 2019 27
    • tháng 9 2019 3
    • tháng 8 2019 3
    • tháng 7 2019 4
    • tháng 6 2019 5
    • tháng 5 2019 2
    • tháng 4 2019 1
    • tháng 3 2019 1
    • tháng 2 2019 4
    • tháng 1 2019 4
  • 2018 10
    • tháng 12 2018 2
    • tháng 11 2018 3
    • tháng 10 2018 1
    • tháng 9 2018 4
Hiện thêm

Bài đăng phổ biến

Thuật toán tính lũy thừa nhanh. Giải thích một cách đơn giản

Hình ảnh Khi được yêu cầu viết một hàm tính lũy thừa. Bạn sẽ làm như thế nào? Đáp án khá đơn giản phải không, chỉ với một vòng lặp for  thì có thể giải quyết tất cả. Nhưng như vậy liệu đã tối ưu chưa? Gần đây mình có xem qua một vài chương của cuốn Nhập môn lập trình  và tìm thấy một vài điều thú vị. Trong đó, có phương pháp tính lũy thừa nhanh mà mình muốn chia sẻ lại. Cuốn sách Nhập môn Lập trình Phương pháp thông thường Với đề bài trên, cách làm dễ nhất là: Để dễ dàng thử độ hiệu quả của thuật toán, mình dùng kiểu dữ liệu int64_t  tức kiểu số nguyên sử dụng 64 bit ( 8 byte ) để chứa dữ liệu và kiểu long tức kiểu số nguyên sử dụng 32 bit ( 4 byte ) để chứa dữ liệu. Nếu các bạn đã biết về phân tích độ phức tạp của thuật toán thì độ phức tạp của thuật toán trên là O(n) , có nghĩa là nếu n càng lớn thì thời gian tính toán xong của ta càng lâu. Nếu các bạn cho hàm trên chạy với n = 1 000 000 000  (1 tỷ cho bạn nào lười đếm). Máy mình chạy mất xấp xỉ 8 ... More »

Độc lập tuyến tính và phụ thuộc tuyến tính

Hình ảnh Chào mọi người! Hôm nay, mình sẽ nói về một thứ căn bản của căn bản nhất của Đại số tuyến tính đó là phụ thuộc tuyến tính và độc lập tuyến tính. Đây là khái niệm mình thấy làm nền tảng rất chắc để giải thích những lý thuyết khác của môn học này. Vậy thế nào là phụ thuộc hay độc lập tuyến tính? Về định nghĩa toán học, chúng được nêu như sau được nêu ra như sau: "Một tập hợp các vector được cho là phụ thuộc tuyến tính nếu ít nhất một vector có thể được biểu diễn dưới dạng tổ hợp tuyến tính của các vector còn lại. Nếu chúng không thể được biểu diễn dưới dạng tổ hợp tuyến tính, thì ta gọi những vector này độc lập tuyến tính với nhau." Tuy nhiên cách giải thích này vẫn còn khá hàn lâm. Hãy chia nhỏ nó ra và giải thích từng phần một theo một cách dễ hiểu hơn ở phần tiếp theo. Tổ hợp tuyến tính Giả sử chúng ta có 3 vector 𝐚 \boldsymbol{a} , 𝐛 \boldsymbol{b} , 𝐜 \boldsymbol{c} và để cho đơn giản, mình sẽ cho chúng thuộc ℝ 2 \mathbb{R}^2 . 𝐚 = [ 1 0 ] 𝐛 = [ 2 1 ] 𝐜 ... More »

Phép phân tích ma trận A=LU

Phép phân tích ma trận (hay Matrix Decomposition) là một phương pháp nhân tử hóa ma trận bằng cách tách ma trận đó ra thành phép nhân của nhiều ma trận khác nhau. Cũng giống như với một số tự nhiên, ta có thể tách số đó ra thành các nhân tử khác nhau như tách ra thành các thừa số nguyên tố để dễ dàng nhận biết được đặc điểm của con số ấy. Thì nhân tử hóa ma trận cũng được xây trên khái niệm tương tự. Phép phân tích ma trận đơn giản nhất là A = L U A=LU . Trong đó: A A là một ma trận bất kỳ. L L là ma trận tam giác dưới. (L là viết tắt của Lower trong Lower Triangle). U U là ma trận tam giác trên. (U là viết tắt của Upper trong Upper Triangle). A = L U A = LU Phép phân tích ma trận này rất đơn giản, đầu tiên ta thực hiện các phép biến đổi trên dòng để đưa A thành một ma trận bậc thang. Lúc đó, ma trận bậc thang chính là U. Tôi sẽ lấy một ma trận có kích thước 3x3 để làm ví dụ. A = [ 1 5 2 3 6 4 − 2 2 7 ] A = \begin{bmatrix} 1 & 5 & 2 \\ 3 & 6 & 4 \\ -2 ... More »

Hướng dẫn đăng ký khóa học trên Coursera và edX miễn phí

Hình ảnh Chào các bạn, cũng sắp Tết rồi và chắc mọi người rất mong ngóng khoảng thời gian nghỉ Tết phía trước để bắt đầu kế hoạch "ăn-ngủ-chơi" của mình. Được nghỉ mấy tuần liền mà có vài việc cứ làm hoài cũng chán phải không? Sao chúng ta không tận dụng thời gian rảnh rỗi đó để học hỏi thêm một điều gì đó mới mẻ, tự nâng cấp kiến thức của bản thân trong khi mà không bị áp lực từ việc học tập hay đi làm. Nếu như bạn có ý định như vậy vào kỳ nghỉ này, hãy đọc bài viết này. Giới thiệu về Coursera và edX Cả edX và Coursera đều là nền tảng cung cấp các khóa học trực tuyến về nhiều lĩnh vực từ các trường đại học danh tiếng trên thế giới. Mục tiêu của cả hai tổ chức này đều giống nhau đó là mang kiến thức từ các trường đại học ra toàn thế giới, khiến chúng dễ dàng được tiếp cận bởi bất kỳ ai. Trong đó, Coursera được sáng lập bởi hai giáo sư Stanford là Andrew Ng và Daphne Koller vào năm 2012. Cũng vào tháng 5 năm đó, hai trường đại học danh tiếng thế giới là Harvard và M... More »

[Nhập môn Machine Learning] Bài 7: Vector hóa thuật toán

Hình ảnh Chúng ta đã đi được khá xa trong những bài vừa qua. Ta đã biết đến phương pháp tối ưu phổ biến nhất trong Machine Learning chính là Gradient Descent và sử dụng nó trong Linear Regression. Bây giờ, ta cần lùi bước lại để có được cái nhìn toàn cảnh về những việc mà ta đã làm. Đồng thời, tìm hiểu thêm một phương pháp cài đặt (implement) phổ biến hơn cho các thuật toán Machine Learning đó là vector hóa. Cái nhìn tổng quan của các thuật toán Machine Learning Đối với Linear Regression, có 3 thành phần chính mà chúng ta đã học được đó chính là: Model : hay chúng ta còn gọi là Hypothesis Function. Lost Function : đôi khi cũng được nhắc đến với cái tên Cost Function như tôi đã làm. Optimizer : là một thuật toán tối ưu. Ba thành phần trên cũng chính là một bộ khung chung cho các thuật toán thuộc supervised learning trong Machine Learning mà bạn sẽ gặp sau này (hay thậm chí cả Deep Learning nữa). Trong đó, ta có một model để thực hiện các dự đoán, một lost function để đo tính chính xá... More »

Từ khóa » Vim Ide Là Gì