A very popular insert mode mapping for Neovim/Vim is to map jk or kj or jj to <ESC> for quicker escaping from the insert mode. I have used the following mapping for quite some time:

inoremap jk <ESC>


I wrote some code for my project and found that the result isn’t correct. So I spent quite some time debugging the whole working process this program and found that it is because I have initialized a list wrongly.

In my older post, I have shared how to set up auto-completion for vim-lsp with the help of deoplete. One annoyance is that I can not use fuzzy matching for auto-completion: the completion items in the pop-up completion menu seems to be selected base on prefix matching.

Shortly after I started using Neovim, I learned about the concept of text objects. For example, when the cursor is inside a pair of [], we can use ci] to change text inside them. This is definitely one of the greatest moments on my road of learning Vim. However, I haven’t really thought about how does text object really work.

This post continues my previous post on nifty Nvim/Vim techniques.

Some notes on using regular expressions in Python.

A quick summary on how to set up Lisp Development environment in Neovim.

To profile Python code line by line. We can use line_profiler1.

In my previous post, I have go over the basic setup to make vim-lsp work. However, I haven’t touch on an important part of writing code: linting. It turns out that configure it correctly is harder than I thought.

After using deoplete along with deoplete-jedi for more than two years, I have finally decided to try something new for code completion. Yeah, you guess it, the Language Server Protocol (LSP in short).

When I was in a folder and tried to edit multiple files using glob pattern with the following Neovim command:

:edit *.vim


I was surprised to find that Neovim gives the following error message:

E77: Too many file names.

In Bash shell, when editting in the command line. There are two different modes, vi mode or Emacs mode. Emacs-mode is the default mode. Below are some of the handy shortcuts in Emacs-mode.

I usually use {num}Ctrl-6 to switch buffers in Neovim, where {num} is the number of buffer (see this post). Since Neovim has builtin gt mapping to switch between tabpages, I thought it might be a good idea to use gb as buffer switching shortcut avoid strech when pressing Ctrl-6.

Except those ASCII characters, it is often not straightforward to insert Unicode characters into Vim/Neovim. Below I will summarize different ways to enter Unicode character inside Neovim/Vim.

This post continues my previous post on nifty Nvim/Vim techniques.