Learning Vim and Vimscript doesn't have to be hard. This is the guide that you're looking for.

Learn Vim (the Smart Way)

What's This?

Learn Vim (the Smart Way) is a guide to learn the good parts of Vim.

There are many places to learn Vim: the vimtutor is a great place to start and the help manual has all the references you will ever need. However, the average user needs something more than vimtutor and less than the help manual. This guide attempts to bridge that gap by highlighting only the key features to learn the most useful parts of Vim in the least time possible.

This guide is written for both beginner and advanced Vimmers. It starts out with broad and simple concepts and ends with specific and advanced concepts. If you're an advanced user already, I would encourage you to read this guide from start to finish anyway, because you will learn something new!

I Want More Vim Tips!

Follow @learnvim for updates, Vim tips, etc.

Support This Project

This guide is and will always be free.

If you want to financially support this project, you can purchase this guide on gumroad.

Table Of Contents

Prologue

Part 1: Learn Vim the Smart Way

Part 2: Customize Vim the Smart Way

Part 3: Learn Vimscript the Smart Way

Translations

License & Copyright

The materials here are all © 2020-2021 Igor Irianto.

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.

Owner
Igor Irianto
Old school is the new cool.
Igor Irianto
Comments
  • can i transfer it to my native language

    can i transfer it to my native language

    Hi dear, I want transfer it to my native language. But your licensed looks i cannot make any changes, including translation. So i'm not sure if i can translate it

    In addition, maybe you can add language management. I think many people are willing to add the translation pr in your book(including me).

  • issues with Spanish Updated

    issues with Spanish Updated

    Hello Igor. I ask you to remove the link to Spanish Updated version. Since that repo is a copy of my translation, but without respect my work with translation and the license (CC-by-sa-nc). That is not a fork of mine. He has copied the files and create his own repo. And I have spend many hours doing translation, reviews, etc that not appears in that repo. Greetings

  • Meaning MVP in Chap 29

    Meaning MVP in Chap 29

    Hello!

    I was translating Chap29 and I found:

    For MVP, this command was good enough,

    What does mean MVP in this context? (Maybe a silly question...)

    Greetings

  • fix error in example with dictionaries in ch24

    fix error in example with dictionaries in ch24

    I think that is an error, right? BTW, I find this section of dictionaries a bit confussing... At the beginnig of the section, what are the items in a dictionarie, why are shown in that way, etc... (IMHO)

    PS: I almost reach the end of the chapter!!

  • suggestion for section (or something like that)

    suggestion for section (or something like that)

    I think that you have not cover about the key in the guide... (I'm wrong) Maybe can be added a section or something in some chapter about this setup?

    Greetings.

  • Changing the Hyperlink to my repository,

    Changing the Hyperlink to my repository,

    I highly recommend that you put my repository since I have already finished translating everything up to the current date while that repository only goes up to chapter 15. I am very active so as soon as you make an update I could translate it and put it in my repository.

  • ask for clarification ch27

    ask for clarification ch27

    Hello.

    Translating the section Dictionary in chapter 27 I don't undertand what means when you say namespace. Don't know how to translate that word, because don't understand completly the second example...

    Also in next section (Funcref) after the first example I can read

    let MyFar = function("MyFunc")

    Should be MyVar instead MyFar?

    Thanks for your support

  • An explanation a bit confusing?

    An explanation a bit confusing?

    Working in my translation of your guide I found an explanation of one command a bit confusing. I refer to the part you brake it down this comand:

    https://github.com/iggredible/Learn-Vim/blob/master/ch13_the_global_command.md#reduce-multiple-empty-lines-to-one-empty-line

    Don't know if the text can be improved to gain clarity when reading the text... If not, I should to think again how to translate the best way possible!! :)

    Greetings!

  • Chinese version of Learn-Vim

    Chinese version of Learn-Vim

    hello @iggredible, Thank for sharing. I am maintainer of @vim-china. And can we translate this into chinese? Just same as vim-golare_zh_cn did by us.

    https://github.com/wsdjeg/Learn-Vim_zh_cn/issues/1

  • Index errors.

    Index errors.

    "Ch22", which is displayed in the Table of Contents. But in the first line inside the file ('ch22_vimrc.md`), it change to "ch21". The same errors occured in ch23, ch24, ch25, ch26, ch27, ch28, ch29.

  • errors in ch12? ch13?

    errors in ch12? ch13?

    Hello, I was trying to update the chinese version of "Learn-Vim". In the section "Pattern Matching" of ch12 (search_and_substitute), i found some words a bit confusing. i am not ture that if it's a error or my misunderstand.

    In the line 342:

    • (\w+) (\w+) is a group match. \w is one of Vim's predefined ranges for a word character ([0-9A-Za-z_]). The ( ) surrounding it captures a word character match in a group. Notice the space between the two groupings. (\w+) (\w+) captures two groups. The first group captures "one" and the second group captures "two".

    The first group captures "one" and the second group captures "two". Should it be changed to "In the first line, the first group captures "let", and the second group captures "one"?

    Another doubt in the section “Advanced Sort” of ch13(the global command): In the line 538 and 539:

    • :g/\[/ is the global command pattern.
    • /\[/+1 is the first pattern. It matches a literal left square bracket "[". The +1 refers to the line below it.

    In the line 538, the character "/[/" which followed ":g", is repeatitive with line 539. Should it be changed to ":g is the global command" ?

  • Using modeline to fold vimrc in chapter 22

    Using modeline to fold vimrc in chapter 22

A command line utility and library for generating professional looking invoices in Go.
A command line utility and library for generating professional looking invoices in Go.

ginvoicer A command line utility and library for generating professional looking invoices in Go. This is a very rough draft and there could still be b

Dec 15, 2022
Integrated console application library, using Go structs as commands, with menus, completions, hints, history, Vim mode, $EDITOR usage, and more ...
Integrated console application library, using Go structs as commands, with menus, completions, hints, history, Vim mode, $EDITOR usage, and more ...

Gonsole - Integrated Console Application library This package rests on a readline console library, (giving advanced completion, hint, input and histor

Nov 20, 2022
Golang project for looking up geo from an IP. Meant to be deployed on Render.

geoip-render-go Golang project for looking up geo from an IP. Meant to be deployed on Render. Dependencies In order to use this project, you'll need a

Dec 6, 2021
Vim made in Go that you shouldn't use.

novavim This is my attempt at making Vim from scratch in Go, meaning this project will utilize no libs outside of the Go standard library: no ncurses,

Aug 4, 2022
🐉 BLAZINGLY FAST CLI plugin manager for (neo)vim

viper BLAZINGLY FAST CLI plugin manager for (neo)vim. Usage Viper does all the nice and basic things you'd expect from a (neo)vim plugin manager, and

Jun 9, 2022
Command line tool to copy images from a camera SD card to your hard drive

Command line tool to copy images from a camera SD card to your hard drive

Nov 26, 2021
Scrappy is a cli tool that allows multiple web scrappers to monitor periodically for a basic ruleset coverage and inform users when the criteria have been met.

Scrappy - A multi-type web scrapper with alerting Scrappy is a cli tool that allows multiple web scrappers to monitor periodically for a basic ruleset

Nov 7, 2021
Gostall - Run go install ./cmd/server and not have the binary install in your GOBIN be called server?

GOSTALL Ever wanted to run go install ./cmd/server and not have the binary insta

Jan 7, 2022
A simple way for CLI command to have many subcommands

subcommands This is a modified fork of google/subcommands that uses lucasepe/pflag Subcommands is a Go package that implements a simple way for a sing

Oct 12, 2021
The runner project is to create an interface for users to run their code remotely without having to have any compiler on their machine
The runner project is to create an interface for users to run their code remotely without having to have any compiler on their machine

The runner project is to create an interface for users to run their code remotely without having to have any compiler on their machine. This is a work in progress project for TCSS 401X :)

May 29, 2022
a Go language free and open-source document for learning from zero level

Go document a GO language free and open-source document for learning from zero level Please publish and collaborate OPEN-SOURCE Sections About go lang

Jan 8, 2023
Creating a simple CLI tool in the Go Programming Language for personal learning and fun

Creating a simple CLI tool in the Go Programming Language for personal learning and fun Open to feedback :) Build docker dev environment docker build

Dec 12, 2021
Idiomatic Go input parsing with subcommands, positional values, and flags at any position. No required project or package layout and no external dependencies.
Idiomatic Go input parsing with subcommands, positional values, and flags at any position. No required project or package layout and no external dependencies.

Sensible and fast command-line flag parsing with excellent support for subcommands and positional values. Flags can be at any position. Flaggy has no

Jan 1, 2023
Query, update and convert data structures from the command line. Comparable to jq/yq but supports JSON, TOML, YAML, XML and CSV with zero runtime dependencies.
Query, update and convert data structures from the command line. Comparable to jq/yq but supports JSON, TOML, YAML, XML and CSV with zero runtime dependencies.

dasel Dasel (short for data-selector) allows you to query and modify data structures using selector strings. Comparable to jq / yq, but supports JSON,

Jan 2, 2023
CLI for Shamir's Secret Sharing and AES key generation, encryption, and decryption.
CLI for Shamir's Secret Sharing and AES key generation, encryption, and decryption.

Shush ?? This simple program will help you run Shamir's Secret Sharing algorithm on any file using the split and merge commands.

Feb 1, 2022
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

Sloc Cloc and Code (scc) A tool similar to cloc, sloccount and tokei. For counting physical the lines of code, blank lines, comment lines, and physica

Jan 8, 2023
Got: Simple golang package and CLI tool to download large files faster 🏃 than cURL and Wget!

Got. Simple and fast concurrent downloader. Installation ❘ CLI Usage ❘ Module Usage ❘ License Comparison Comparison in cloud server: [root@centos-nyc-

Dec 29, 2022
cTRL is a server for remote execution of pending tasks and commands in real time, supporting a queue with continuous thread limiting and throttling.

Документация на русском: https://github.com/eltaline/ctrl/blob/master/README-RUS.md cTRL is a server written in Go language that uses a modified versi

Mar 3, 2022
Fast, realtime regex-extraction, and aggregation into common formats such as histograms, numerical summaries, tables, and more!
Fast, realtime regex-extraction, and aggregation into common formats such as histograms, numerical summaries, tables, and more!

rare A file scanner/regex extractor and realtime summarizor. Supports various CLI-based graphing and metric formats (histogram, table, etc). Features

Dec 29, 2022