Migrating from VSCode
Welcome to FtVim! This guide helps Visual Studio Code users transition to Neovim by mapping familiar features and shortcuts.
Key Differences
Modal Editing
The biggest difference is modal editing. In VSCode, you're always in "insert mode". In Vim:
| Mode | Purpose | Enter With |
|---|---|---|
| Normal | Navigation, commands | Esc or Ctrl+[ |
| Insert | Typing text | i, a, o, etc. |
| Visual | Selecting text | v, V, Ctrl+v |
| Command | Running commands | : |
Tip: Press Esc whenever you're unsure. It returns you to Normal mode.
No Mouse Required
While FtVim supports mouse, you'll be much faster using the keyboard. Give it a few days!
Configuration is Code
Instead of a settings GUI, you configure FtVim with Lua code. This is more powerful and version-controllable.
Keyboard Shortcuts Comparison
File Navigation
| VSCode | FtVim | Description |
|---|---|---|
Ctrl+P | <leader>ff | Find files |
Ctrl+Shift+F | <leader>fs | Search in files (grep) |
Ctrl+Shift+E | <leader>e | Toggle file explorer |
Ctrl+Tab | <leader>fb | Switch between open files |
Ctrl+Shift+P | <leader>fC | Command palette |
Ctrl+G | :<number> | Go to line |
Ctrl+R | <leader>fr | Recent files |
Editing
| VSCode | FtVim | Description |
|---|---|---|
Ctrl+C | y (yank) | Copy (in visual mode) |
Ctrl+V | p (paste) | Paste |
Ctrl+X | d (delete) | Cut (in visual mode) |
Ctrl+Z | u | Undo |
Ctrl+Shift+Z | Ctrl+r | Redo |
Ctrl+D | * then cgn | Select next occurrence |
Ctrl+/ | gcc or <leader>/ | Toggle line comment |
Alt+Up/Down | <A-k> / <A-j> | Move line up/down |
Ctrl+Shift+K | dd | Delete line |
Ctrl+Enter | o | Insert line below |
Ctrl+Shift+Enter | O | Insert line above |
Code Intelligence
| VSCode | FtVim | Description |
|---|---|---|
F12 | gd | Go to definition |
Shift+F12 | gr | Find references |
Ctrl+Space | Ctrl+Space | Trigger autocomplete |
Ctrl+. | <leader>ca | Quick fix / code actions |
F2 | <leader>cr | Rename symbol |
Ctrl+Shift+O | :lua Snacks.picker.lsp_symbols() | Go to symbol in file |
Ctrl+T | :lua Snacks.picker.lsp_workspace_symbols() | Go to symbol in workspace |
Ctrl+Hover | K | Show hover documentation |
Shift+Alt+F | <leader>cf | Format document |
Search & Replace
| VSCode | FtVim | Description |
|---|---|---|
Ctrl+F | / | Search in file |
Ctrl+H | :%s/old/new/g | Replace in file |
F3 | n | Next match |
Shift+F3 | N | Previous match |
Ctrl+Shift+F | <leader>fs | Search in project |
Ctrl+Shift+H | :cdo s/old/new/g | Replace in project (after sending the search results to the quickfix list) |
Window Management
| VSCode | FtVim | Description |
|---|---|---|
Ctrl+\ | <leader>wsv | Split editor vertically |
Ctrl+1/2/3 | <C-h/l> | Focus editor group |
Ctrl+W | <leader>bd | Close editor |
Ctrl+Shift+T | - | Reopen closed editor |
Ctrl+B | <leader>e | Toggle sidebar |
Ctrl+` | <C-\> | Toggle terminal |
Git
| VSCode | FtVim | Description |
|---|---|---|
| Source Control view | <leader>go | Git status |
| - | <leader>ghb | Git blame (line) |
| Git: Stage Changes | <leader>ghs / <leader>ghS | Stage hunk / whole file |
| Git: Commit | :!git commit or the terminal (<C-\>) | Commit |
VSCode Extensions → FtVim Equivalents
| VSCode Extension | FtVim Plugin | Notes |
|---|---|---|
| IntelliSense | nvim-lspconfig + blink.cmp | Built-in |
| GitLens | gitsigns.nvim | Built-in |
| Prettier | conform.nvim | Built-in, prettier comes with the Web extra |
| ESLint | eslint language server | Web extra |
| Auto Rename Tag | nvim-ts-autotag | Add it as a plugin |
| Bracket Pair Colorizer | Built-in Neovim | matchparen |
| Path Intellisense | blink.cmp | Path source |
| Project Manager | - | <leader>fr (recent files) |
| TODO Highlight | todo-comments.nvim | Add it as a plugin |
| Error Lens | LSP virtual text | Built-in |
| C/C++ Debugger | nvim-dap | Debugging extra |
Concepts Translation
Files vs Buffers
| VSCode | Neovim |
|---|---|
| Open file = Tab | Open file = Buffer |
| Tab = One file | Tab = Window layout |
In Neovim, buffers are open files (even if not visible). Windows are viewports showing buffers. Tabs are collections of windows.
Think of it as: You can have many buffers, arrange them in windows, and save window arrangements as tabs.
The Explorer
VSCode's sidebar explorer → FtVim's Neo-tree
<leader>e- Toggle explorera- Create file/folderd- Deleter- Renamec- Copyp- PasteEnter- Open file
Integrated Terminal
VSCode: Ctrl+`
FtVim: <C-\> (Ctrl + backslash)
The terminal floats over your editor. Press the same key to hide it.
Settings
VSCode: Ctrl+, opens settings GUI
FtVim: Edit ~/.config/nvim/lua/plugins/*.lua
Quick Tips for Transitioning
1. Don't Fight Modal Editing
It feels strange at first, but modal editing is more efficient. Stick with it for a week.
2. Learn Motions Gradually
Start with basics:
h j k l- Movementw b- Word movementgg G- Start/end of file0 $- Start/end of line
3. Use Which-Key
Press <leader> (Space) and wait. FtVim shows all available commands!
4. Master the Dot Command
. repeats your last change. It's incredibly powerful.
Example:
ciw- Change inner word- Type new word
Esc- Move to next word
.- Repeat the change!
5. Embrace Text Objects
Instead of selecting with mouse:
diw- Delete inner wordci"- Change inside quotesda{- Delete around bracesvip- Select inner paragraph
6. Use Registers for Multiple Clipboards
"ay - Yank to register a
"ap - Paste from register a
You have 26 registers (a-z)!
Your First Week
Day 1-2: Survival Mode
- Focus on
i,Esc,:w,:q - Use
<leader>ffto find files - Use the mouse if needed
Day 3-4: Basic Motions
- Practice
h j k lmovement - Learn
w b eword motions - Try
0 $ gg Gjumps
Day 5-7: Editing Commands
d(delete),c(change),y(yank)- Combine with motions:
dw,c$,yy - Use
.to repeat
Week 2+: Advanced Features
- Text objects (
ciw,da{) - Macros (
qto record) - Marks (
mto set,'to jump)
Getting Help
If you're stuck:
- Press
<leader>to see available commands :help <topic>for built-in docs- Check Troubleshooting for common issues
- Tips and Tricks for more techniques
Remember: Every Vim expert was once a beginner. The learning curve is worth it!