این دوره یک مسیر آموزشی کامل و عملی برای یادگیری Vim و Neovim است؛ از اولین باری که ادیتور را باز میکنید و نمیدانید چطور از آن خارج شوید، تا روزی که یک محیط توسعهی شخصیسازیشده با LSP، اتوکامپلیت و پلاگینهای حرفهای میسازید.
این دوره برای چه کسی مناسب است؟
- برنامهنویسانی که از ادیتورهای معمولی (VSCode, Sublime) به Vim/Nvim مهاجرت میکنند
- کاربران لینوکس/ترمینال که میخواهند سرعت ویرایش خود را چند برابر کنند
- هرکسی که علاقهمند به کار بدون ماوس و ویرایش متن با سرعت فکر است
پیشنیاز: آشنایی ابتدایی با ترمینال کافی است. نیازی به تجربهی قبلی با Vim نیست.
| فصل | عنوان | سطح |
|---|---|---|
| ۱ | آشنایی و فلسفهی Vim | 🟢 مقدماتی |
| ۲ | حرکت در متن (Motions) | 🟢 مقدماتی |
| ۳ | ویرایش متن | 🟡 پایهای |
| ۴ | جستجو، جایگزینی و ناوبری پیشرفته | 🟡 پایهای |
| ۵ | Visual Mode و ویرایش بلوکی | 🟡 پایهای |
| ۶ | پیکربندی Vim و Neovim | 🟠 متوسط |
| ۷ | پلاگینها و اکوسیستم Neovim | 🟠 متوسط |
| ۸ | کارگاه عملی و Workflow حرفهای | 🔴 پیشرفته |
| ۹ | 🎁 بونوس: مهارتهای پیشرفته و جامع | 🔴 پیشرفته |
| — | 📋 چیتشیت نهایی | — |
| — | 📚 منابع تکمیلی | — |
یاد میگیرید Vim چیست، چرا با ادیتورهای معمولی فرق دارد، و چطور بدون ترس وارد و خارج آن شوید.
Vim یک ادیتور متنی Modal است؛ یعنی بر خلاف ادیتورهای معمولی که همیشه در حالت "تایپ" هستید، Vim چند حالت (Mode) مجزا دارد و در هر حالت کیبورد کار متفاوتی انجام میدهد. این ایده باعث میشود بدون برداشتن دست از روی حروف اصلی کیبورد بتوانید متن را جابهجا کنید، حذف کنید، کپی کنید و ویرایش کنید — چیزی که در ادیتورهای معمولی نیازمند ماوس یا کلیدهای جهتنما (که دست را از محل اصلی دور میکنند) است.
💡 آنالوژی: تصور کنید یک کارگر دارید که یک ابزار برای «رفتن» دارد، یک ابزار برای «برداشتن» دارد و یک ابزار برای «بریدن» دارد. اگر بخواهید کاری را ترکیب کنید (مثلاً «برو تا آخر جمله و ببر»)، فقط باید ابزارها را کنار هم بچینید. Vim دقیقاً همینطور کار میکند: افعال (verbs) + حرکتها (motions) = عملیات ترکیبی نامحدود.
| ویژگی | Vim | Neovim |
|---|---|---|
| سال انتشار | ۱۹۹۱ | ۲۰۱۴ (فورک از Vim) |
| زبان پیکربندی | Vimscript | Vimscript و Lua |
| پشتیبانی از LSP بومی | ندارد (نیاز به پلاگین سنگین) | دارد (built-in) |
| معماری پلاگین | قدیمیتر و محدودتر | مدرن، async و قابل توسعه با API |
| مناسب برای | سیستمهای قدیمی/سرورهای محدود | توسعهی مدرن و IDE-like شدن |
نتیجه: یادگیری Vim پایه (حرکتها، ویرایش، مدها) دقیقاً همان چیزی است که در Neovim هم استفاده میشود. Neovim فقط لایهی مدرنتری روی همان اسکلت اضافه کرده است.
┌─────────────┐ i, a, o, I, A, O ┌─────────────┐
│ NORMAL │ ────────────────────▶│ INSERT │
│ (فرمان) │◀──────────────────────│ (تایپ) │
└─────────────┘ Esc └─────────────┘
│ ▲
v,V,^v│ │Esc
▼ │
┌─────────────┐
│ VISUAL │
│ (انتخاب) │
└─────────────┘
│
│ :
▼
┌─────────────┐
│ COMMAND │
│ (دستور) │
└─────────────┘
- Normal Mode: حالت پیشفرض؛ اینجا حرکت میکنید و فرمان میدهید (نه تایپ میکنید)
- Insert Mode: همان تایپ معمولی متن
- Visual Mode: انتخاب متن برای اعمال یک عملیات روی آن
- Command-line Mode: اجرای دستورات (ذخیره، جستجو، جایگزینی و ...)
# Debian/Ubuntu
sudo apt install vim neovim
# Arch Linux
sudo pacman -S vim neovim
# macOS
brew install vim neovim| دستور | عملکرد |
|---|---|
vim file.txt |
باز کردن فایل |
i |
ورود به Insert Mode |
Esc |
بازگشت به Normal Mode |
:w |
ذخیره (Write) |
:q |
خروج (Quit) |
:wq یا ZZ |
ذخیره و خروج |
:q! |
خروج بدون ذخیره (اجباری) |
⚠️ تمرین فصل ۱: یک فایل جدید به نامtest.txtباز کنید، وارد Insert Mode شوید، جملهی «من دارم Vim یاد میگیرم» را تایپ کنید، خارج شوید و فایل را ذخیره کنید — همه بدون استفاده از ماوس.
حرکت در متن با سرعت بدون لمس کلیدهای جهتنما و درک منطق «شمارنده + حرکت».
k
▲
h ◀───┼───▶ l
▼
j
فراموش کردن Arrow Keys اولین قدم واقعی برای سریع شدن است. دستها روی ردیف اصلی میمانند.
| دستور | عملکرد |
|---|---|
w |
ابتدای کلمهی بعدی |
b |
ابتدای کلمهی قبلی |
e |
انتهای کلمهی فعلی/بعدی |
W, B, E |
مثل بالا ولی بر اساس فاصله (WORD بهجای word) |
| دستور | عملکرد |
|---|---|
0 |
ابتدای خط |
^ |
اولین کاراکتر غیرفاصلهی خط |
$ |
انتهای خط |
gg |
ابتدای فایل |
G |
انتهای فایل |
{شماره}G |
رفتن به خط مشخص، مثلاً 42G |
{, } |
پاراگراف قبلی/بعدی |
قانون طلایی Vim: [تعداد] + [حرکت]
3w → سه کلمه جلو برو
5j → پنج خط پایین برو
10G → برو به خط ۱۰
| دستور | عملکرد |
|---|---|
f{char} |
پرش تا کاراکتر مشخص (Find) |
t{char} |
پرش تا یک کاراکتر قبل از آن (Till) |
; |
تکرار آخرین f/t |
, |
تکرار در جهت عکس |
⚠️ تمرین فصل ۲: یک فایل متنی چندخطی باز کنید و بدون هیچ کلیدی بهجزhjkl,w,b,gg,Gو شمارندهها، به خط ۱۵ کلمهی سوم بروید.
تسلط بر ترکیب «عملگر + حرکت» — قلب فلسفهی Vim.
| دستور | عملکرد |
|---|---|
i |
درج قبل از کرسر |
a |
درج بعد از کرسر (Append) |
I |
درج در ابتدای خط |
A |
درج در انتهای خط |
o |
خط جدید زیر خط فعلی |
O |
خط جدید بالای خط فعلی |
عملگرها بهتنهایی کاری نمیکنند؛ باید با یک حرکت یا شیء متنی ترکیب شوند:
| عملگر | معنی |
|---|---|
d |
حذف (Delete) |
c |
تغییر = حذف + ورود به Insert (Change) |
y |
کپی (Yank) |
dw → حذف تا ابتدای کلمهی بعد
d$ → حذف تا انتهای خط
dd → حذف کل خط (تکرار عملگر)
cw → تغییر کلمه
yy → کپی کل خط
ci" → تغییر محتوای داخل گیومه ("...")
di( → حذف محتوای داخل پرانتز (...)
💡 این جدول همان چیزی است که Vim را از بقیه متمایز میکند: بهجای حفظ کردن صدها میانبر، فقط چند عملگر و چند حرکت را حفظ میکنید و همهی ترکیبها بهصورت خودکار در دسترستان است.
| شیء | معنی |
|---|---|
iw |
داخل کلمه (inner word) |
aw |
کلمه + فاصلهی اطراف (a word) |
i", i' |
داخل گیومه |
i(, i{, i[ |
داخل پرانتز/آکولاد/براکت |
it |
داخل تگ HTML/XML |
| دستور | عملکرد |
|---|---|
p |
پیست بعد از کرسر |
P |
پیست قبل از کرسر |
u |
بازگشت (Undo) |
Ctrl+r |
بازگردانی Undo (Redo) |
. |
تکرار آخرین تغییر |
⚠️ تمرین فصل ۳: در یک پاراگراف، باci"محتوای یک رشتهی داخل گیومه را عوض کنید، سپس با.همان تغییر را روی خط بعدی تکرار کنید.
پیدا کردن و جایگزین کردن متن در کل فایل بدون باز کردن حتی یک پنجرهی Find/Replace.
| دستور | عملکرد |
|---|---|
/pattern |
جستجو به جلو |
?pattern |
جستجو به عقب |
n |
نتیجهی بعدی |
N |
نتیجهی قبلی |
* |
جستجوی کلمهی زیر کرسر (جلو) |
# |
جستجوی کلمهی زیر کرسر (عقب) |
:s/old/new/ " جایگزینی اولین مورد در خط فعلی
:s/old/new/g " جایگزینی همهی موارد در خط فعلی
:%s/old/new/g " جایگزینی در کل فایل
:%s/old/new/gc " جایگزینی با تأیید تکتک (confirm)
:5,10s/old/new/g " جایگزینی فقط بین خطوط ۵ تا ۱۰| دستور | عملکرد |
|---|---|
ma |
ثبت موقعیت فعلی با نام a |
`a |
پرش دقیق به mark a |
'a |
پرش به ابتدای خط mark a |
`` |
پرش به موقعیت قبل از آخرین جهش |
| دستور | عملکرد |
|---|---|
:e filename |
باز کردن فایل جدید |
:bn / :bp |
بافر بعدی/قبلی |
:ls |
لیست بافرهای باز |
Ctrl+^ |
جابهجایی سریع بین دو بافر آخر |
:%s/\d\+/NUM/g " هر عدد را با NUM جایگزین کن
:%s/^\s\+//g " فاصلههای ابتدای خط را حذف کن
:g/pattern/d " هر خطی که pattern دارد را حذف کن
⚠️ تمرین فصل ۴: در یک فایل کد، همهی وقوعهای یک متغیر را با:%s/oldName/newName/gcبا تأیید تکبهتک جایگزین کنید.
انتخاب و ویرایش همزمان چند خط یا یک ستون از متن — کاری که در اکثر ادیتورها نیازمند افزونهی جانبی است.
| دستور | نوع انتخاب |
|---|---|
v |
کاراکتری (Character-wise) |
V |
خطی (Line-wise) |
Ctrl+v |
بلوکی (Block-wise) |
پس از انتخاب، هر عملگری که در فصل ۳ یاد گرفتید قابل استفاده است:
v3w → انتخاب سه کلمه، سپس d برای حذف یا y برای کپی
Vjjd → انتخاب سه خط و حذف
فرض کنید میخواهید در ابتدای ۱۰ خط یک // اضافه کنید:
1. Ctrl+v را بزنید
2. با j به پایین بروید تا ۱۰ خط انتخاب شود
3. I را بزنید و // را تایپ کنید
4. Esc را بزنید → // به همهی خطوط اضافه میشود!
| دستور | عملکرد |
|---|---|
I (در Block Mode) |
درج در ابتدای همهی خطوط انتخابی |
A (در Block Mode) |
درج در انتهای همهی خطوط انتخابی |
r{char} (در Block Mode) |
جایگزینی کاراکتر در همهی خطوط |
| دستور | عملکرد |
|---|---|
"ayy |
کپی خط در رجیستر a |
"ap |
پیست از رجیستر a |
"+y |
کپی به کلیپبورد سیستم |
"+p |
پیست از کلیپبورد سیستم |
⚠️ تمرین فصل ۵: با Visual Block Mode یک کامنت#را به ابتدای ۵ خط از یک فایل کانفیگ اضافه کنید.
ساخت یک فایل کانفیگ شخصی، تفاوت vimrc و init.lua، و نگاشت کلیدهای دلخواه.
| ادیتور | مسیر |
|---|---|
| Vim | ~/.vimrc |
| Neovim (Vimscript) | ~/.config/nvim/init.vim |
| Neovim (Lua — پیشنهادی) | ~/.config/nvim/init.lua |
-- ~/.config/nvim/init.lua
vim.opt.number = true -- نمایش شماره خطوط
vim.opt.relativenumber = true -- شماره خط نسبی (برای پرش سریعتر)
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true -- تب را به فاصله تبدیل کن
vim.opt.wrap = false
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.termguicolors = true
vim.opt.clipboard = "unnamedplus" -- اتصال به کلیپبورد سیستمlocal map = vim.keymap.set
-- تنظیم leader key (کلید فرمانده)
vim.g.mapleader = " " -- Space بهعنوان leader
map("n", "<leader>w", ":w<CR>", { desc = "ذخیرهی فایل" })
map("n", "<leader>q", ":q<CR>", { desc = "خروج" })
map("n", "<C-h>", "<C-w>h", { desc = "حرکت به پنجرهی چپ" })
map("i", "jj", "<Esc>", { desc = "خروج سریع از Insert Mode" })" Vimscript (init.vim)
set number
nnoremap <leader>w :w<CR>-- Lua (init.lua) — معادل بالا
vim.opt.number = true
vim.keymap.set("n", "<leader>w", ":w<CR>")💡 اگر تازه شروع میکنید، مستقیم سراغ init.lua بروید. Lua ساختاریافتهتر، سریعتر و آیندهی اکوسیستم Neovim است.
~/.config/nvim/
├── init.lua
└── lua/
├── config/
│ ├── options.lua
│ └── keymaps.lua
└── plugins/
└── init.lua
⚠️ تمرین فصل ۶: یک فایلinit.luaبسازید که شماره خط، تب ۴ فاصلهای و یک keymap برای ذخیرهی سریع با<leader>wرا تنظیم کند.
تبدیل Neovim خام به یک محیط توسعهی کامل شبیه IDE.
-- bootstrap کردن lazy.nvim در init.lua
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup("plugins")LSP (Language Server Protocol) قابلیتهایی مثل تکمیل خودکار، رفتن به تعریف تابع، و نمایش خطا را فراهم میکند.
-- lua/plugins/lsp.lua
return {
"neovim/nvim-lspconfig",
dependencies = { "williamboman/mason.nvim" },
config = function()
require("mason").setup()
require("lspconfig").pyright.setup({}) -- مثال برای پایتون
end,
}return {
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = { "lua", "python", "javascript" },
highlight = { enable = true },
})
end,
}return {
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
}| دستور | عملکرد |
|---|---|
:Telescope find_files |
جستجوی فایل در پروژه |
:Telescope live_grep |
جستجوی متن در کل پروژه |
:Telescope buffers |
لیست بافرهای باز |
| پلاگین | کاربرد |
|---|---|
nvim-cmp |
تکمیل خودکار (Autocomplete) |
nvim-tree.lua |
نمایش درخت فایلها (File Explorer) |
lualine.nvim |
نوار وضعیت زیبا |
gitsigns.nvim |
نمایش تغییرات Git کنار خطوط |
Comment.nvim |
کامنت کردن سریع با gcc |
⚠️ تمرین فصل ۷: lazy.nvim را نصب کنید و سه پلاگین Treesitter، Telescope و Comment.nvim را اضافه کنید.
تبدیل همهی مهارتهای قبلی به یک روال کاری روان و روزمره.
tmux new -s dev
# در یک پنل: nvim را باز کن
# در پنل دیگر: تست/بیلد را اجرا کن| میانبر tmux | عملکرد |
|---|---|
Ctrl+b % |
تقسیم عمودی |
Ctrl+b " |
تقسیم افقی |
Ctrl+b arrow |
جابهجایی بین پنلها |
| دستور | عملکرد |
|---|---|
:vsplit |
تقسیم عمودی پنجره |
:split |
تقسیم افقی پنجره |
Ctrl+w + h/j/k/l |
جابهجایی بین پنجرهها |
Ctrl+w + = |
برابر کردن اندازهی پنجرهها |
nvim .→ باز کردن پروژه<leader>ff(Telescope) → پیدا کردن فایلgd→ رفتن به تعریف یک تابع (LSP)ci"→ تغییر یک مقدار رشتهای:%s/oldFunc/newFunc/gc→ تغییر نام تابع در کل فایل<leader>ca→ اجرای Code Action از LSP:w→ ذخیره
-- میانبر برای اجرای فایل پایتون فعلی
map("n", "<leader>r", ":!python3 %<CR>", { desc = "اجرای فایل" })
-- میانبر برای toggle کردن File Explorer
map("n", "<leader>e", ":NvimTreeToggle<CR>", { desc = "نمایش/مخفی کردن Explorer" })- هرگز از کلیدهای جهتنما استفاده نکنید — فقط
hjkl - بهجای چند بار زدن یک کلید، از شمارنده استفاده کنید (
5jنهjjjjj) - عملگر + شیء متنی را جایگزین انتخاب دستی با ماوس کنید
- کانفیگ خود را در Git نگه دارید (
dotfilesrepo) - هفتهای یک میانبر جدید یاد بگیرید — نه بیشتر، تا واقعاً در حافظهی عضلانی بنشیند
⚠️ پروژهی نهایی دوره: یک فایل کانفیگ کامل Neovim بسازید که شامل LSP، Treesitter، Telescope، نوار وضعیت و حداقل ۵ keymap شخصیسازیشده باشد، و آن را در یک ریپازیتوری GitHub با نامdotfilesمنتشر کنید.
پوشش دادن آن دسته از قابلیتهای Vim/Neovim که کاربر حرفهای را از کاربر متوسط جدا میکند — از اتوماسیون با Macro تا دیباگ داخل ادیتور.
Macro یعنی ضبط یک سری فرمان و اجرای دوبارهی آن با یک کلید. یکی از قویترین ابزارهای Vim برای کارهای تکراری روی چند خط.
qa → شروع ضبط ماکرو در رجیستر a
... → هر فرمانی که میخواهید ضبط شود
q → پایان ضبط
@a → اجرای ماکروی a
@@ → تکرار آخرین ماکرو اجراشده
10@a → اجرای ماکروی a به تعداد ۱۰ بار
💡 مثال واقعی: میخواهید در ۲۰ خط، عدد ابتدای خط را داخل پرانتز بگذارید. یک بار روی خط اول ماکرو را ضبط میکنید (
qa→ عملیات →q)، سپس با19@aهمان کار روی ۱۹ خط باقیمانده تکرار میشود.
zf{motion} " ساخت fold روی یک محدوده، مثلاً zfap برای یک پاراگراف
za " باز/بسته کردن fold زیر کرسر (toggle)
zo / zc " باز کردن / بستن fold
zR " باز کردن همهی fold ها
zM " بستن همهی fold ها-- فعالسازی fold بر اساس Treesitter در Neovim
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
vim.opt.foldenable = false -- فایل با fold باز نشود| رجیستر | کاربرد |
|---|---|
"0 |
آخرین چیزی که با y کپی شده (فقط yank، نه delete) |
"1-"9 |
تاریخچهی حذفهای اخیر (جدیدترین در "1) |
"_ |
Black Hole Register — حذف بدون بازنویسی کلیپبورد |
"% |
نام فایل فعلی |
". |
آخرین متن Insert شده |
": |
آخرین دستور Command-line اجراشده |
"_ddp → خط را حذف کن بدون اینکه رجیستر اصلی را خراب کنی، بعد پیست کن
:reg → نمایش محتوای همهی رجیسترها
| دستور | عملکرد |
|---|---|
Ctrl+o |
پرش به موقعیت قبلی در Jumplist |
Ctrl+i |
پرش به موقعیت بعدی در Jumplist |
g; |
رفتن به محل تغییر قبلی (Changelist) |
g, |
رفتن به محل تغییر بعدی |
:jumps |
نمایش کامل Jumplist |
vimdiff file1.txt file2.txt
# یا در خود Neovim:
:vert diffsplit file2.txt| دستور | عملکرد |
|---|---|
]c / [c |
پرش به تفاوت بعدی/قبلی |
do |
گرفتن تغییر از فایل مقابل (diff obtain) |
dp |
فرستادن تغییر به فایل مقابل (diff put) |
zo / zc |
باز/بستن بخشهای یکسان تاشده |
" یک تابع ساده در Vimscript که خط جاری را دوبار تکرار میکند
function! DuplicateLine()
let l:line = getline('.')
call append('.', l:line)
endfunction
nnoremap <leader>dl :call DuplicateLine()<CR>-- همان کار در Lua برای Neovim
local function duplicate_line()
local line = vim.api.nvim_get_current_line()
local row = vim.api.nvim_win_get_cursor(0)[1]
vim.api.nvim_buf_set_lines(0, row, row, false, { line })
end
vim.keymap.set("n", "<leader>dl", duplicate_line):set spell spelllang=en_us " فعالسازی غلطیاب
]s / [s " پرش به غلط بعدی/قبلی
z= " پیشنهاد اصلاح
zg " افزودن کلمه به دیکشنری شخصی
" مدیریت Session — ذخیرهی کل حالت پنجرهها/فایلهای باز
:mksession! ~/.config/nvim/session.vim
:source ~/.config/nvim/session.vim-- lua/plugins/dap.lua
return {
"mfussenegger/nvim-dap",
dependencies = { "rcarriga/nvim-dap-ui" },
config = function()
local dap, dapui = require("dap"), require("dapui")
dapui.setup()
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
end
end,
}| دستور | عملکرد |
|---|---|
:DapToggleBreakpoint |
تنظیم/حذف Breakpoint |
:DapContinue |
اجرا تا Breakpoint بعدی |
:DapStepOver / :DapStepInto |
قدمبهقدم رفتن در کد |
| پلاگین | کاربرد |
|---|---|
harpoon |
پرش فوقسریع بین چند فایل پرکاربرد پروژه |
which-key.nvim |
نمایش راهنمای keymapها هنگام تایپ leader key |
none-ls.nvim (جایگزین null-ls) |
فرمتکردن و Lint خودکار کد |
trouble.nvim |
نمایش یکجای خطاها و Diagnostics پروژه |
undotree |
نمایش گرافیکی درخت Undo (بازگشت به هر نسخهی قبلی) |
⚠️ تمرین فصل ۹: یک ماکرو ضبط کنید که در ۱۰ خط، ابتدای هر خط علامت- [ ](چکلیست Markdown) اضافه کند و با9@aروی بقیهی خطوط اجرا شود.
⚠️ پروژهی تکمیلی:harpoonوundotreeرا به کانفیگ فصل ۸ اضافه کنید و یک تابع سفارشی با Lua بنویسید که یک keymap اختصاصی داشته باشد.
📌 کلیک کنید تا چیتشیت کامل باز شود
h j k l → چپ/پایین/بالا/راست
w b e → کلمه بعد/قبل/انتهای کلمه
0 ^ $ → ابتدای خط/اولین حرف/انتهای خط
gg G → ابتدا/انتهای فایل
{n}G → رفتن به خط n
f{c} t{c} → پرش تا کاراکتر
i a I A o O → ورود به Insert Mode (حالتهای مختلف)
d c y → حذف/تغییر/کپی
dd cc yy → روی کل خط
dw cw yw → روی یک کلمه
d$ c$ → تا انتهای خط
ci" ci( ciw → تغییر داخل گیومه/پرانتز/کلمه
p P → پیست بعد/قبل از کرسر
u Ctrl+r → Undo / Redo
. → تکرار آخرین تغییر
/pattern → جستجو به جلو
n N → نتیجه بعدی/قبلی
:%s/old/new/gc → جایگزینی در کل فایل با تأیید
:g/pattern/d → حذف خطوطی که pattern دارند
v V Ctrl+v → کاراکتری/خطی/بلوکی
gv → انتخاب مجدد آخرین ناحیه
:e file → باز کردن فایل
:vsplit → تقسیم عمودی
Ctrl+w h/j/k/l → جابهجایی بین پنجرهها
:bn :bp → بافر بعدی/قبلی
qa ... q → ضبط ماکرو در رجیستر a
@a @@ → اجرای ماکرو / تکرار آخرین ماکرو
zf za zo zc → ساخت/toggle/باز/بستن fold
"_dd → حذف بدون خراب کردن کلیپبورد
Ctrl+o Ctrl+i → قبلی/بعدی در Jumplist
]c [c do dp → پیمایش و اعمال تغییر در Diff Mode
]s [s z= → پرش بین غلطهای املایی و پیشنهاد اصلاح
- مستندات رسمی Neovim:
:helpداخل خود ادیتور (کاملترین منبع) - تمرین تعاملی: پروژهی
vimtutor(با تایپvimtutorدر ترمینال) - بازی آموزشی: Vim Adventures / VimGolf برای تمرین حرفهایتر
- کانفیگهای نمونه برای الهام گرفتن: جستجوی
nvim dotfilesدر GitHub
⚠️ توجه: لینکهای بالا از حافظه نوشته شدهاند و ممکن است دقیق یا بهروز نباشند؛ حتماً پیش از استفاده در دوره، آدرسها و مسیرها را بررسی و تأیید کنید.
