Vim has always been my go-to text editor because of how flexible and powerful it is, especially when it comes to speeding up my workflow. Out of all its modes, I’ve found command-line mode to be a real game-changer. It’s where you can execute more complex tasks, access a whole range of hidden features, and even tweak your editing setup to make it just right for you. In this article, I’ll walk you through what makes command-line mode so special and how you can make the most of it.
What is Command-Line Mode?
Command-line mode in Vim is a special mode activated by typing : (colon) when in Normal mode. It allows you to execute a wide range of commands, from basic file operations to complex text manipulations and Vim configurations.
Accessing Command-Line Mode
To enter command-line mode:
- Ensure you’re in Normal mode (press 
Escif unsure). - Type 
:(colon). - The cursor will move to the bottom of the screen, where you can type your command.
 
Basic Commands
Here are some fundamental commands you can execute in command-line mode:
:w- Write (save) the current file:q- Quit the current window (fails if there are unsaved changes):wqor:x- Write and quit:q!- Quit without saving (force quit):e filename- Open a file for editing:help keyword- Open help for a specific keyword
Text Manipulation Commands
Command-line mode offers powerful text manipulation capabilities:
:s/old/new- Replace first occurrence of ‘old’ with ’new’ on the current line:%s/old/new/g- Replace all occurrences of ‘old’ with ’new’ throughout the file:5,10s/old/new/g- Replace all occurrences of ‘old’ with ’new’ between lines 5 and 10
File and Buffer Management
Manage multiple files and buffers efficiently:
:bd- Close the current buffer:bn- Go to the next buffer:bp- Go to the previous buffer:ls- List all open buffers
Window Management
Control Vim’s windowing system:
:sp filename- Open a file in a new horizontal split window:vsp filename- Open a file in a new vertical split window:resize 10- Resize the current window to 10 lines height:vertical resize 80- Resize the current window to 80 characters width
Vim Settings
Vim’s command-line mode allows you to customize your editing environment on-the-fly. Here’s an expanded list of useful settings and commands:
Display Settings
:set number/:set nu- Show line numbers:set nonumber/:set nonu- Hide line numbers:set relativenumber/:set rnu- Show relative line numbers:set cursorline/:set cul- Highlight the current line:set cursorcolumn/:set cuc- Highlight the current column:set list- Show hidden characters (tabs, trailing spaces, etc.):set nolist- Hide hidden characters:set wrap- Enable line wrapping:set nowrap- Disable line wrapping
Indentation and Formatting
:set tabstop=4/:set ts=4- Set tab width to 4 spaces:set shiftwidth=4/:set sw=4- Set indent width to 4 spaces:set expandtab/:set et- Use spaces instead of tabs:set noexpandtab/:set noet- Use tabs instead of spaces:set autoindent/:set ai- Enable auto-indentation:set smartindent/:set si- Enable smart indentation
Search Settings
:set ignorecase/:set ic- Make searches case-insensitive:set smartcase/:set scs- Case-sensitive if search contains uppercase:set hlsearch/:set hls- Highlight all search matches:set incsearch/:set is- Show matches as you type
Editor Behavior
:set paste- Enable paste mode (for pasting text from outside Vim):set nopaste- Disable paste mode:set mouse=a- Enable mouse support in all modes:set scrolloff=5/:set so=5- Keep 5 lines above/below cursor:set backspace=indent,eol,start- Make backspace behave as expected
File Type Specific Settings
:set filetype=python- Set file type to Python:set syntax=javascript- Set syntax highlighting for JavaScript
Viewing and Saving Settings
:set- View changed settings:set all- View all settings:set {option}?- View the current value of a specific option:setlocal- Set an option for the current buffer only
Persistent Settings
To make settings persistent across Vim sessions, add them to your ~/.vimrc file:
:edit ~/.vimrc  " Open vimrc file
:write          " Save changes
:source %       " Reload vimrc without restarting Vim
Remember, you can combine multiple settings in a single command:
:set number relativenumber cursorline expandtab tabstop=2 shiftwidth=2
These commands offer a glimpse into Vim’s extensive customization options. I’ll write a detailed article on vim settings in a later post. So stay tuned!
Advanced Features
Explore some of Vim’s more advanced capabilities:
:make- Run the make command from within Vim:!command- Execute an external shell command:r !command- Insert the output of a shell command into the current buffer:earlier 15m- Revert the document to how it was 15 minutes ago
Command-Line Mode History
Vim keeps a history of commands you’ve executed:
- Press 
:and then use the up/down arrow keys to cycle through previous commands - Type part of a command and use the up/down arrows to search through commands that start with what you’ve typed
 
Command-Line Window
For more complex command editing:
- Press 
q:in Normal mode to open the command-line window - Edit your command as you would normal text
 - Press 
Enterto execute the command on the current line 
Tips for Mastering Command-Line Mode
- Use tab completion to auto-complete commands, filenames, and options
 - Leverage the power of wildcards in file operations (e.g., 
:w *.txt) - Create custom commands with 
:command - Use 
:setto view current settings and:set allto see all options - Combine commands with 
|(pipe) for more complex operations 
But the beauty of vim lies in the fact that you can do everything the command mode offers by creating custom keymappings/keybindings. I’ll cover this in a later blog post.
Conclusion
Vim’s command-line mode is a versatile and powerful tool that significantly enhances editing efficiency. By mastering this mode, you can perform complex operations quickly, customize your editing environment on-the-fly, and tap into Vim’s extensive feature set. Regular practice and exploration of Vim’s vast command set will help you become a more proficient and productive Vim user.
Remember, the key to mastering Vim’s command-line mode is consistent practice and gradual exploration of new commands and features. Happy Vimming!
