Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Vim & Neovim Course Banner

⚡ دوره جامع Vim & Neovim

از صفر تا حرفه‌ای — تسلط کامل بر سریع‌ترین ادیتور دنیا

Vim Neovim Level Language

«Vim یاد گرفتن مثل دوچرخه‌سواریه؛ اول می‌افتی، بعد دیگه هیچ‌وقت نمی‌خوای پیاده راه بری.»


📖 درباره‌ی این دوره

این دوره یک مسیر آموزشی کامل و عملی برای یادگیری Vim و Neovim است؛ از اولین باری که ادیتور را باز می‌کنید و نمی‌دانید چطور از آن خارج شوید، تا روزی که یک محیط توسعه‌ی شخصی‌سازی‌شده با LSP، اتوکامپلیت و پلاگین‌های حرفه‌ای می‌سازید.

این دوره برای چه کسی مناسب است؟

  • برنامه‌نویسانی که از ادیتورهای معمولی (VSCode, Sublime) به Vim/Nvim مهاجرت می‌کنند
  • کاربران لینوکس/ترمینال که می‌خواهند سرعت ویرایش خود را چند برابر کنند
  • هرکسی که علاقه‌مند به کار بدون ماوس و ویرایش متن با سرعت فکر است

پیش‌نیاز: آشنایی ابتدایی با ترمینال کافی است. نیازی به تجربه‌ی قبلی با Vim نیست.


🗂️ فهرست مطالب

فصل عنوان سطح
۱ آشنایی و فلسفه‌ی Vim 🟢 مقدماتی
۲ حرکت در متن (Motions) 🟢 مقدماتی
۳ ویرایش متن 🟡 پایه‌ای
۴ جستجو، جایگزینی و ناوبری پیشرفته 🟡 پایه‌ای
۵ Visual Mode و ویرایش بلوکی 🟡 پایه‌ای
۶ پیکربندی Vim و Neovim 🟠 متوسط
۷ پلاگین‌ها و اکوسیستم Neovim 🟠 متوسط
۸ کارگاه عملی و Workflow حرفه‌ای 🔴 پیشرفته
۹ 🎁 بونوس: مهارت‌های پیشرفته و جامع 🔴 پیشرفته
📋 چیت‌شیت نهایی
📚 منابع تکمیلی

فصل ۱: آشنایی و فلسفه‌ی Vim

🎯 اهداف فصل

یاد می‌گیرید Vim چیست، چرا با ادیتورهای معمولی فرق دارد، و چطور بدون ترس وارد و خارج آن شوید.

۱.۱ Vim چیست و چرا اهمیت دارد؟

Vim یک ادیتور متنی Modal است؛ یعنی بر خلاف ادیتورهای معمولی که همیشه در حالت "تایپ" هستید، Vim چند حالت (Mode) مجزا دارد و در هر حالت کیبورد کار متفاوتی انجام می‌دهد. این ایده باعث می‌شود بدون برداشتن دست از روی حروف اصلی کیبورد بتوانید متن را جابه‌جا کنید، حذف کنید، کپی کنید و ویرایش کنید — چیزی که در ادیتورهای معمولی نیازمند ماوس یا کلیدهای جهت‌نما (که دست را از محل اصلی دور می‌کنند) است.

💡 آنالوژی: تصور کنید یک کارگر دارید که یک ابزار برای «رفتن» دارد، یک ابزار برای «برداشتن» دارد و یک ابزار برای «بریدن» دارد. اگر بخواهید کاری را ترکیب کنید (مثلاً «برو تا آخر جمله و ببر»)، فقط باید ابزارها را کنار هم بچینید. Vim دقیقاً همین‌طور کار می‌کند: افعال (verbs) + حرکت‌ها (motions) = عملیات ترکیبی نامحدود.

۱.۲ تفاوت Vim و Neovim

ویژگی Vim Neovim
سال انتشار ۱۹۹۱ ۲۰۱۴ (فورک از Vim)
زبان پیکربندی Vimscript Vimscript و Lua
پشتیبانی از LSP بومی ندارد (نیاز به پلاگین سنگین) دارد (built-in)
معماری پلاگین قدیمی‌تر و محدودتر مدرن، async و قابل توسعه با API
مناسب برای سیستم‌های قدیمی/سرورهای محدود توسعه‌ی مدرن و IDE-like شدن

نتیجه: یادگیری Vim پایه (حرکت‌ها، ویرایش، مدها) دقیقاً همان چیزی است که در Neovim هم استفاده می‌شود. Neovim فقط لایه‌ی مدرن‌تری روی همان اسکلت اضافه کرده است.

۱.۳ حالت‌های اصلی (Modes)

┌─────────────┐   i, a, o, I, A, O    ┌─────────────┐
│  NORMAL     │  ────────────────────▶│  INSERT     │
│  (فرمان)    │◀──────────────────────│  (تایپ)     │
└─────────────┘         Esc           └─────────────┘
      │  ▲
   v,V,^v│  │Esc
      ▼  │
┌─────────────┐
│  VISUAL     │
│  (انتخاب)   │
└─────────────┘
      │
      │  :
      ▼
┌─────────────┐
│  COMMAND    │
│  (دستور)    │
└─────────────┘
  • Normal Mode: حالت پیش‌فرض؛ اینجا حرکت می‌کنید و فرمان می‌دهید (نه تایپ می‌کنید)
  • Insert Mode: همان تایپ معمولی متن
  • Visual Mode: انتخاب متن برای اعمال یک عملیات روی آن
  • Command-line Mode: اجرای دستورات (ذخیره، جستجو، جایگزینی و ...)

۱.۴ نصب Vim و Neovim

# 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 یاد می‌گیرم» را تایپ کنید، خارج شوید و فایل را ذخیره کنید — همه بدون استفاده از ماوس.


فصل ۲: حرکت در متن (Motions)

🎯 اهداف فصل

حرکت در متن با سرعت بدون لمس کلیدهای جهت‌نما و درک منطق «شمارنده + حرکت».

۲.۱ حرکت پایه: hjkl

      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.

۳.۱ ورود به Insert Mode

دستور عملکرد
i درج قبل از کرسر
a درج بعد از کرسر (Append)
I درج در ابتدای خط
A درج در انتهای خط
o خط جدید زیر خط فعلی
O خط جدید بالای خط فعلی

۳.۲ عملگرها (Operators)

عملگرها به‌تنهایی کاری نمی‌کنند؛ باید با یک حرکت یا شیء متنی ترکیب شوند:

عملگر معنی
d حذف (Delete)
c تغییر = حذف + ورود به Insert (Change)
y کپی (Yank)

۳.۳ ترکیب عملگر + حرکت = ابرقدرت Vim

dw   → حذف تا ابتدای کلمه‌ی بعد
d$   → حذف تا انتهای خط
dd   → حذف کل خط (تکرار عملگر)
cw   → تغییر کلمه
yy   → کپی کل خط
ci"  → تغییر محتوای داخل گیومه ("...")
di(  → حذف محتوای داخل پرانتز (...)

💡 این جدول همان چیزی است که Vim را از بقیه متمایز می‌کند: به‌جای حفظ کردن صدها میان‌بر، فقط چند عملگر و چند حرکت را حفظ می‌کنید و همه‌ی ترکیب‌ها به‌صورت خودکار در دسترستان است.

۳.۴ اشیاء متنی (Text Objects)

شیء معنی
iw داخل کلمه (inner word)
aw کلمه + فاصله‌ی اطراف (a word)
i", i' داخل گیومه
i(, i{, i[ داخل پرانتز/آکولاد/براکت
it داخل تگ HTML/XML

۳.۵ کپی، پیست و Undo/Redo

دستور عملکرد
p پیست بعد از کرسر
P پیست قبل از کرسر
u بازگشت (Undo)
Ctrl+r بازگردانی Undo (Redo)
. تکرار آخرین تغییر

⚠️ تمرین فصل ۳: در یک پاراگراف، با ci" محتوای یک رشته‌ی داخل گیومه را عوض کنید، سپس با . همان تغییر را روی خط بعدی تکرار کنید.


فصل ۴: جستجو، جایگزینی و ناوبری پیشرفته

🎯 اهداف فصل

پیدا کردن و جایگزین کردن متن در کل فایل بدون باز کردن حتی یک پنجره‌ی Find/Replace.

۴.۱ جستجوی متن

دستور عملکرد
/pattern جستجو به جلو
?pattern جستجو به عقب
n نتیجه‌ی بعدی
N نتیجه‌ی قبلی
* جستجوی کلمه‌ی زیر کرسر (جلو)
# جستجوی کلمه‌ی زیر کرسر (عقب)

۴.۲ جایگزینی (Substitute)

:s/old/new/          " جایگزینی اولین مورد در خط فعلی
:s/old/new/g         " جایگزینی همه‌ی موارد در خط فعلی
:%s/old/new/g        " جایگزینی در کل فایل
:%s/old/new/gc       " جایگزینی با تأیید تک‌تک (confirm)
:5,10s/old/new/g     " جایگزینی فقط بین خطوط ۵ تا ۱۰

۴.۳ Marks — نشانه‌گذاری موقعیت‌ها

دستور عملکرد
ma ثبت موقعیت فعلی با نام a
`a پرش دقیق به mark a
'a پرش به ابتدای خط mark a
`` پرش به موقعیت قبل از آخرین جهش

۴.۴ پرش بین فایل‌ها و بافرها

دستور عملکرد
:e filename باز کردن فایل جدید
:bn / :bp بافر بعدی/قبلی
:ls لیست بافرهای باز
Ctrl+^ جابه‌جایی سریع بین دو بافر آخر

۴.۵ استفاده از Regex در جستجو

:%s/\d\+/NUM/g       " هر عدد را با NUM جایگزین کن
:%s/^\s\+//g         " فاصله‌های ابتدای خط را حذف کن
:g/pattern/d         " هر خطی که pattern دارد را حذف کن

⚠️ تمرین فصل ۴: در یک فایل کد، همه‌ی وقوع‌های یک متغیر را با :%s/oldName/newName/gc با تأیید تک‌به‌تک جایگزین کنید.


فصل ۵: Visual Mode و ویرایش بلوکی

🎯 اهداف فصل

انتخاب و ویرایش هم‌زمان چند خط یا یک ستون از متن — کاری که در اکثر ادیتورها نیازمند افزونه‌ی جانبی است.

۵.۱ سه نوع Visual Mode

دستور نوع انتخاب
v کاراکتری (Character-wise)
V خطی (Line-wise)
Ctrl+v بلوکی (Block-wise)

۵.۲ کار با Visual Mode

پس از انتخاب، هر عملگری که در فصل ۳ یاد گرفتید قابل استفاده است:

v3w  → انتخاب سه کلمه، سپس d برای حذف یا y برای کپی
Vjjd → انتخاب سه خط و حذف

۵.۳ Visual Block — ابزار جادویی

فرض کنید می‌خواهید در ابتدای ۱۰ خط یک // اضافه کنید:

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 یک کامنت # را به ابتدای ۵ خط از یک فایل کانفیگ اضافه کنید.


فصل ۶: پیکربندی Vim و Neovim

🎯 اهداف فصل

ساخت یک فایل کانفیگ شخصی، تفاوت vimrc و init.lua، و نگاشت کلیدهای دلخواه.

۶.۱ محل فایل‌های کانفیگ

ادیتور مسیر
Vim ~/.vimrc
Neovim (Vimscript) ~/.config/nvim/init.vim
Neovim (Lua — پیشنهادی) ~/.config/nvim/init.lua

۶.۲ تنظیمات پایه (Neovim / 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" -- اتصال به کلیپ‌بورد سیستم

۶.۳ نگاشت کلید (Keymaps)

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 و Lua

" 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

🎯 اهداف فصل

تبدیل Neovim خام به یک محیط توسعه‌ی کامل شبیه IDE.

۷.۱ نصب Plugin Manager — lazy.nvim

-- 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 — هوش زبان‌شناختی

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,
}

۷.۳ Treesitter — رنگ‌آمیزی نحوی هوشمند

return {
  "nvim-treesitter/nvim-treesitter",
  build = ":TSUpdate",
  config = function()
    require("nvim-treesitter.configs").setup({
      ensure_installed = { "lua", "python", "javascript" },
      highlight = { enable = true },
    })
  end,
}

۷.۴ Telescope — جستجوی فازی در پروژه

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 را اضافه کنید.


فصل ۸: کارگاه عملی و Workflow حرفه‌ای

🎯 اهداف فصل

تبدیل همه‌ی مهارت‌های قبلی به یک روال کاری روان و روزمره.

۸.۱ ترکیب Vim با ترمینال و tmux

tmux new -s dev
# در یک پنل: nvim را باز کن
# در پنل دیگر: تست/بیلد را اجرا کن
میان‌بر tmux عملکرد
Ctrl+b % تقسیم عمودی
Ctrl+b " تقسیم افقی
Ctrl+b arrow جابه‌جایی بین پنل‌ها

۸.۲ Split Windows در خود Neovim

دستور عملکرد
:vsplit تقسیم عمودی پنجره
:split تقسیم افقی پنجره
Ctrl+w + h/j/k/l جابه‌جایی بین پنجره‌ها
Ctrl+w + = برابر کردن اندازه‌ی پنجره‌ها

۸.۳ ویرایش یک پروژه‌ی واقعی — سناریوی کامل

  1. nvim . → باز کردن پروژه
  2. <leader>ff (Telescope) → پیدا کردن فایل
  3. gd → رفتن به تعریف یک تابع (LSP)
  4. ci" → تغییر یک مقدار رشته‌ای
  5. :%s/oldFunc/newFunc/gc → تغییر نام تابع در کل فایل
  6. <leader>ca → اجرای Code Action از LSP
  7. :w → ذخیره

۸.۴ ساخت میان‌برهای شخصی‌سازی‌شده

-- میان‌بر برای اجرای فایل پایتون فعلی
map("n", "<leader>r", ":!python3 %<CR>", { desc = "اجرای فایل" })

-- میان‌بر برای toggle کردن File Explorer
map("n", "<leader>e", ":NvimTreeToggle<CR>", { desc = "نمایش/مخفی کردن Explorer" })

۸.۵ عادت‌های یک کاربر حرفه‌ای Vim

  • هرگز از کلیدهای جهت‌نما استفاده نکنید — فقط hjkl
  • به‌جای چند بار زدن یک کلید، از شمارنده استفاده کنید (5j نه jjjjj)
  • عملگر + شیء متنی را جایگزین انتخاب دستی با ماوس کنید
  • کانفیگ خود را در Git نگه دارید (dotfiles repo)
  • هفته‌ای یک میان‌بر جدید یاد بگیرید — نه بیشتر، تا واقعاً در حافظه‌ی عضلانی بنشیند

⚠️ پروژه‌ی نهایی دوره: یک فایل کانفیگ کامل Neovim بسازید که شامل LSP، Treesitter، Telescope، نوار وضعیت و حداقل ۵ keymap شخصی‌سازی‌شده باشد، و آن را در یک ریپازیتوری GitHub با نام dotfiles منتشر کنید.


فصل ۹: بونوس تکمیلی — مهارت‌های پیشرفته

🎯 اهداف فصل

پوشش دادن آن دسته از قابلیت‌های Vim/Neovim که کاربر حرفه‌ای را از کاربر متوسط جدا می‌کند — از اتوماسیون با Macro تا دیباگ داخل ادیتور.

۹.۱ Macros — اتوماسیون کارهای تکراری

Macro یعنی ضبط یک سری فرمان و اجرای دوباره‌ی آن با یک کلید. یکی از قوی‌ترین ابزارهای Vim برای کارهای تکراری روی چند خط.

qa      → شروع ضبط ماکرو در رجیستر a
...     → هر فرمانی که می‌خواهید ضبط شود
q       → پایان ضبط
@a      → اجرای ماکروی a
@@      → تکرار آخرین ماکرو اجراشده
10@a    → اجرای ماکروی a به تعداد ۱۰ بار

💡 مثال واقعی: می‌خواهید در ۲۰ خط، عدد ابتدای خط را داخل پرانتز بگذارید. یک بار روی خط اول ماکرو را ضبط می‌کنید (qa → عملیات → q)، سپس با 19@a همان کار روی ۱۹ خط باقی‌مانده تکرار می‌شود.

۹.۲ Folding — تا کردن بخش‌هایی از کد

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 باز نشود

۹.۳ رجیسترها به‌صورت کامل (Registers)

رجیستر کاربرد
"0 آخرین چیزی که با y کپی شده (فقط yank، نه delete)
"1-"9 تاریخچه‌ی حذف‌های اخیر (جدیدترین در "1)
"_ Black Hole Register — حذف بدون بازنویسی کلیپ‌بورد
"% نام فایل فعلی
". آخرین متن Insert شده
": آخرین دستور Command-line اجراشده
"_ddp   → خط را حذف کن بدون این‌که رجیستر اصلی را خراب کنی، بعد پیست کن
:reg    → نمایش محتوای همه‌ی رجیسترها

۹.۴ Jumplist و Changelist — تاریخچه‌ی حرکت

دستور عملکرد
Ctrl+o پرش به موقعیت قبلی در Jumplist
Ctrl+i پرش به موقعیت بعدی در Jumplist
g; رفتن به محل تغییر قبلی (Changelist)
g, رفتن به محل تغییر بعدی
:jumps نمایش کامل Jumplist

۹.۵ Diff Mode — مقایسه‌ی فایل‌ها

vimdiff file1.txt file2.txt
# یا در خود Neovim:
:vert diffsplit file2.txt
دستور عملکرد
]c / [c پرش به تفاوت بعدی/قبلی
do گرفتن تغییر از فایل مقابل (diff obtain)
dp فرستادن تغییر به فایل مقابل (diff put)
zo / zc باز/بستن بخش‌های یکسان تاشده

۹.۶ نوشتن اسکریپت واقعی با Vimscript / Lua

" یک تابع ساده در 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)

۹.۷ Spell Checking و Session Management

:set spell spelllang=en_us   " فعال‌سازی غلط‌یاب
]s / [s                       " پرش به غلط بعدی/قبلی
z=                             " پیشنهاد اصلاح
zg                             " افزودن کلمه به دیکشنری شخصی

" مدیریت Session — ذخیره‌ی کل حالت پنجره‌ها/فایل‌های باز
:mksession! ~/.config/nvim/session.vim
:source ~/.config/nvim/session.vim

۹.۸ دیباگ داخل Neovim با DAP

-- 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 دارند

Visual Mode

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

⚠️ توجه: لینک‌های بالا از حافظه نوشته شده‌اند و ممکن است دقیق یا به‌روز نباشند؛ حتماً پیش از استفاده در دوره، آدرس‌ها و مسیرها را بررسی و تأیید کنید.


🎓 پایان دوره — حالا وقتشه دست‌هاتون از روی کیبورد جدا نشه!

اگر این دوره براتون مفید بود، یه ⭐ به ریپازیتوری بدید

About

📚 Complete Vim & Neovim course in Persian (فارسی) — from zero to pro: motions, editing, LSP, plugins & advanced workflows

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors