DEV Community

Cover image for How To Use Vim Mode On The Command Line In Bash

How To Use Vim Mode On The Command Line In Bash

brandon_wallace on June 11, 2021

Introduction Learn how to use Vi mode on the command line in Bash. Vim lovers rejoice. Did you know you can use Vim mode on ...
Collapse
 
doug_b_0f412d7e2510683b83 profile image
Doug B • Edited

Good little description.

BUT

There is ONE thing. This is NOT VIM mode. It's VI mode.
For instance you cant press escape and do ciw to change inner word. That works in vim but not in vi.

Collapse
 
brandonwallace profile image
brandon_wallace

You are correct.

Collapse
 
phantas0s profile image
Matthieu Cneude

Nice article!

You can do the same if you use Zsh. I've written an article how to configure Zsh without oh-my-zsh, and I speak about Zsh vi mode too: thevaluable.dev/zsh-install-config...

Collapse
 
brandonwallace profile image
brandon_wallace

Mathhieu, thank you for sharing! The article you wrote is well written and packed full of information. I saw the Vi mode part. The changing cursor depending on the Vi mode is a great idea. I see we have some of the same Git aliases. Check out my configuration articles for my .bashrc and my .vimrc.

Bashrc Customization Guide – How to Add Aliases, Use Functions, and More

freecodecamp.org/news/bashrc-custo...

Vimrc Configuration Guide - How to Customize Your Vim Code Editor with Mappings, Vimscript, Status Line, and More

freecodecamp.org/news/vimrc-config...

Collapse
 
pbnj profile image
Peter Benjamin (they/them)

For users who have built years of muscle memory using emacs-y shortcuts in bash, like ctrl-a, ctrl-e, ctrl-k, ctrl-u, ctrl-w, alt-f, alt-b ... and so on, you can have best of the both worlds by using the shortcut ctrl-x ctrl-e which will edit current bash readline in $EDITOR.

You can see a demo of it in this blog post: dev.to/chhajedji/bash-edit-command...

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
brandonwallace profile image
brandon_wallace

Thank you sir, I have updated the article to fix the issue.

Collapse
 
gettingpaid profile image
m

"There is no up and down on the command line so j and k don't do anything."
well they do cycle throw the history for me [bash version 5.0.17]

Collapse
 
brandonwallace profile image
brandon_wallace • Edited

Thank you. j and k do indeed move through the command history. I have updated the article to include the new information.

I use this a lot in my .bashrc

function hg() {
    history | grep $1;
}
Enter fullscreen mode Exit fullscreen mode

and this to run the second to last command

$ !-2
Enter fullscreen mode Exit fullscreen mode

Now I can use the j and k keys.

Collapse
 
abthedev profile image
ab-the-dev

I have a question tho, what does command mode do, it doesn't seem to do anything and I can't quit it.

Collapse
 
brandonwallace profile image
brandon_wallace

Thanks for leaving a comment.

Command mode allows you to move the cursor on the command line with the movement keys. Press a, A, i, or I to exit command mode.

Collapse
 
mohiuddinru profile image
Md. Mohiuddin

We use CTRL+L to clear the screen. How to do it here?

Collapse
 
smeagol profile image
Smeagol

While in command mode you should be able to just use ^L to clear the screen. (This is what worked for me on WSL Ubuntu 22.04.1 with bash version 5.1.16.

Collapse
 
brandonwallace profile image
brandon_wallace

@smeagol correct. CTRL+L works to clear the screen.

Collapse
 
kesnar profile image
kesnar

Nice article...

But I can't seem to be able to yank and paste between different terminals....each one seems to have it's own clipboard.
Anyway to fix/change this?

Collapse
 
brandonwallace profile image
brandon_wallace

@kesnar I believe to copy and paste between terminals you have to highlight your text with the cursor, then click CTRL+SHIFT+c to copy and CTRL+SHIFT+v to paste. You might even need to hold down the SHIFT key while you highlight your text.

Collapse
 
itsgabz profile image
itsgabz

I never knew the search function existed, love it, thank you very much, what a time saver.