this post was submitted on 28 Sep 2023
8 points (100.0% liked)

Neovim

496 readers
1 users here now

Neovim is a modal text editor forked off of Vim in 2014. Being modal means that you do not simply type text on screen, but the behavior and functionality of the editor changes entirely depending on the mode.

The most common and most used mode, the "normal mode" for Neovim is to essentially turn your keyboard in to hotkeys with which you can navigate and manipulate text. Several modes exist, but two other most common ones are "insert mode" where you type in text directly as if it was a traditional text editor, and "visual mode" where you select text.

Neovim seeks to enable further community participation in its development and to make drastic changes without turning it in to something that is "not Vim". Neovim also seeks to enable embedding the editor within GUI applications.

The Neovim logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License.

founded 3 years ago
MODERATORS
 

Most of you might know already but I just found out about this today because I needed it. I had thought there's just no way to use escape in norm commands. So I had this file with list of items which were mostly separated by newlines but some of them were separated by spaces so I had to clean it up. It looked something like this:

begin A
begin B begin C
begin D
begin E begin F begin G
begin H

and I needed it to be like this:

begin A
begin B
begin C
begin D
begin E
begin F
begin G
begin H

The beginning of every item was the same string of characters which was helpful. So I had an idea but it required the use of escape in a norm command. I was about to think of some other way that doesn't require escape but then decided to google it and find out if there was a way to use escape. To my surprise it was possible! Why I haven't thought of this before? So this is what I came up with:

:g/.*begin/norm /begin^[hr^M

So the ^[ is an escape and you get it with C-v Esc. Simple as that. The command to organize my list isn't perfect though as it has to be run few times to go through every item but it was enough for my purposes.

TL;DR: Press C-v Esc in command line mode to get escape.

top 3 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 9 months ago (1 children)

Huh, that's pretty sick. I'll admit I've not used the norm command much myself as recordings seem to do the trick. Out of curiosity, why is this better?

[–] [email protected] 4 points 9 months ago (1 children)

I've always thought that macros in vim are slow and clumsy to use. You have to think about getting back to initial state as you record if your intent is to repeat the macro several times. If you make a mistake you have to either record an action that corrects the mistake or edit the macro later after recording. You have to know beforehand how many times you want to repeat the macro or run it one at a time which is clumsy at least with Finnish keyboard layout.

Norm command is much faster to use for my purposes because I can use it for several lines at a time without thinking about the state. I can use it with ranges or with g/re/ and v/re/ commands. If I make a mistake I just delete it. Only thing on the plus side I can think of for macros is it's WYSIWYG approach. You have to have a visual editor in your mind when you write long norm commands.

Here's a tip for you: use :%norm @a to run the macro in register a for every line of the file.

[–] [email protected] 1 points 9 months ago

Oh wow I hadn$)'t thought about using them together like that. I think I'll start using the command quite a bit more to bridge the 'find next placement' step. Though, I was just using a search before the recording and 'n' to get the next occurance the norm command sticks it in my command history