تسلط بر Vim – DevOps ضروری!

【👨🏻💻 یوتیوب】
سایر مطالب مربوط به DevOps را تماشا کنید – AWS
شروع
نمودارهای حرکتی
▼/▶ Cursor ▽/▷ Target
حرکات چپ راست
┌───────────── |
├───────────── 0 $ ──────────────┐
│ ┌────────── ^ fe ────────┐ │
│ │ ┌─────── Fo te ───────┐│ │
│ │ │┌────── To 30| ───┐ ││ │
│ │ ││ ┌──── ge w ───┐ │ ││ │
│ │ ││ │ ┌── b e ─┐ │ │ ││ │
│ │ ││ │ │ ┌h l┐ │ │ │ ││ │
▽ ▽ ▽▽ ▽ ▽ ▽▼ ▼▽ ▽ ▽ ▽ ▽▽ ▽
echo "A cheatsheet from quickref.me"
حرکات بالا به پایین
- SCREEN 1 START
┌─┬─────────▷ #!/usr/bin/python
│ │ ┌───▷
│ │ │ print("Hello")
│ │ { } ▶ print("Vim")
│ │ │ print("!")
│ │ └─▷
│ │ ┌───┬───▷ print("Welcome")
G gg H M L k j ▶ print("to")
│ │ └─▷ print("quickref.me")
│ │ print("/vim")
│ │
│ └─────▷
│ - SCREEN 1 END
└──────────────▷ print("SCREEN 2")
حرکات
| میانبر | شرح |
|---|---|
| سخنرانی | j |
| / | نیم صفحه بالا/پایین |
| / | صفحه بالا/پایین |
کلمات
| میانبر | شرح |
|---|---|
| b / w | کلمه قبلی/بعدی |
| GE / E. | پایان قبلی/بعدی کلمه |
خط
| میانبر | شرح |
|---|---|
| 0 (صفر) / $ | شروع/پایان خط |
| ^ | شروع خط (غیر خالی) |
شخصیت
| میانبر | شرح |
|---|---|
| FE / FE | به E قبلی/بعدی بروید |
| به / به | قبل از/بعد از O/Next O حرکت کنید |
| / n |
مدرک
| میانبر | شرح |
|---|---|
| gg / g | خط اول/آخرین |
| : n | از |
| } / { | خط خالی بعدی/قبلی |
پنجره
| میانبر | شرح |
|---|---|
| h / m / l | صفحه بالا/میانی/پایین |
| ZT / ZZ / ZB | بالا/مرکز/پایین این خط |
حالت درج
| میانبر | شرح |
|---|---|
| i / a | قبل/بعد از مکان نما را وارد کنید |
| i / a | شروع/پایان خط را وارد کنید |
| o / o (نامه) | خط جدید زیر/بالا را وارد کنید |
| s / s | char/line را حذف کنید و درج کنید |
| ج / سی سی | تغییر به خط پایان/جریان فعلی |
| گسی | در آخرین نقطه درج قرار دهید |
| جنجال |
صرفه جویی و خروج
| میانبر | شرح |
|---|---|
| : w | پس انداز کردن |
| : س | پرونده بستن |
| : WQ | : x |
| : WQA | همه پرونده ها را ذخیره و ترک کنید |
| : س! | ZQ |
| : qa | همه پرونده ها را ببندید |
| : qa! | مجبور به ترک همه پرونده ها |
| : W Now.txt | اکنون بنویسید. |
| : sav new.txt | ذخیره و ویرایش new.txt |
| : w! | برای readonly پرونده بنویسید |
حالت عادی
| میانبر | شرح |
|---|---|
| حرف | یک شخصیت را جایگزین کنید |
| حرف | حالت جایگزین را وارد کنید |
| U / 3U | تغییر 1 /3 بار تغییر می کند |
| تو | تغییر در یک خط |
| j | با خط بعدی بپیوندید |
| / 5 | تغییر مجدد 1/5 بار تغییر می کند |
برش و چسباندن
| میانبر | شرح |
|---|---|
| x | حذف شخصیت (برش) |
| P / P | چسباندن بعد از/قبل |
| XP | دو شخصیت را عوض کنید |
| د | حذف به پایان خط (برش) |
| DW | حذف کلمه (برش) |
| DD | حذف خط (برش) |
| DDP | تعویض دو خط |
| شما | خط یانک (کپی) |
| “*ص | “+P |
| “*y | “+y |
در حالت بصری
| میانبر | شرح |
|---|---|
| د | x |
| حرف | انتخاب را جایگزین کنید |
| حرف | انتخاب یانک (کپی) |
تکرار کننده
| میانبر | شرح |
|---|---|
| بشر | آخرین فرمان را تکرار کنید |
| ؛ | آخرین F ، T ، F یا T را تکرار کنید |
| با | آخرین F ، T ، F یا T را معکوس کنید |
| واد | آخرین تکرار: S |
| @: | یک دستور خط فرمان را تکرار کنید |
حالت بصری
| میانبر | شرح |
|---|---|
| حرفهای | حالت بصری را وارد کنید |
| حرفهای | حالت خط بصری را وارد کنید |
| حالت بلوک بصری را وارد کنید | |
| GGVG | تمام متن را انتخاب کنید |
| > / < | متن را به راست/چپ تغییر دهید |
ماکرو
| جدید | جدید |
|---|---|
| سعادت | ضبط کلان من |
| سعدی | ضبط ماکرو را متوقف کنید |
| I | کلان من را اجرا کنید |
| 7@من | 7 بار کلان را اجرا کنید |
| دفتر | آخرین کلان را تکرار کنید |
شما می توانید کلان را برای هر نامه ای ذخیره کنید نه فقط i
اپراتورهای VIM
استفاده
| میانبر | شرح |
|---|---|
| د | حرف |
| عملگر | حرکت |
اپراتورها را با حرکاتی برای استفاده از آنها ترکیب کنید
اپراتورهای موجود
| میانبر | شرح |
|---|---|
| د | حذف کردن |
| حرف | یانک (کپی) |
| جف | تغییر (حذف سپس درج) |
| پ | خمیر |
| = | کد فرمت |
| g ~ | پرونده را تغییر دهید |
| گودال | بزرگ |
| گودال | حسابهای کوچک |
| > | درست توطئه |
| < | توطئه سمت چپ |
| ! | از طریق برنامه خارجی فیلتر کنید |
نمونه
| ترکیب | شرح |
|---|---|
| DD | خط فعلی را حذف کنید |
| دی جی | دو خط را حذف کنید |
| DW | حذف به کلمه بعدی |
| DB | شروع به شروع کلمه |
| DFA | حذف تا یک کاراکتر |
| د/سلام | حذف تا سلام |
| سی سی | تغییر خط فعلی ، مترادف با S |
| شما | خط فعلی را کپی کنید |
| > j | خط 2 خط |
| GGDG | یک سند کامل را حذف کنید |
| GG = G | یک سند کامل را تورفتگی کنید |
| اشکال | یک سند کامل را کپی کنید |
حساب
[count]
[count]
| ترکیب | شرح |
|---|---|
| 2D | 2 خط را حذف کنید |
| 6 سال | 6 خط کپی کنید |
| D3W | 3 کلمه را حذف کنید |
| D5J | 5 خط را به سمت پایین حذف کنید |
| > 4K | 4 خط به سمت بالا |
اشیاء متن VIM
استفاده
| میانبر | شرح | جدید |
|---|---|---|
| حرفهای | i / a | پ |
| عملگر | داخلی / اطراف | متنی |
با یک اپراتور داخلی یا اطراف بلوک های متنی کار کنید
اشیاء متنی
| میانبر | شرح |
|---|---|
| پ | پاراگراف |
| حرف | کلام |
| حرف | Word (احاطه شده توسط فضای سفید) |
| حرف | حکم |
| [ ( { < | A []، () ، یا {} بلوک |
| ])}> | بوها []، () ، یا {} بلوک |
| “” | یک رشته نقل شده |
| شرح | یک بلوک [( |
| B | A block in [{ |
| t | A HTML tag block |
See :help text-objects
Delete
| Shortcut | Description |
|---|---|
| diw | Delete inner word |
| dis | Delete inner sentence |
| di” | Delete in quotes |
| da” | Delete in quotes (including quotes) |
| dip | Delete a paragraph |
Selections
| Shortcut | Description |
|---|---|
| vi” | Select inner quotes “…” |
| va” | Select quotes “…” |
| vi[ | Select inner brackets […] |
| VA[ | Select brackets […] |
| با صدای بلند | Word داخلی را انتخاب کنید |
| VIP | پاراگراف داخلی را انتخاب کنید |
| VIPIP | پاراگراف بیشتر را انتخاب کنید |
متفرقه
| میانبر | شرح |
|---|---|
| صف | تغییر کلمه درونی |
| CI “ | نقل قول های داخلی را تغییر دهید |
| استنباط | تغییر برچسب های داخلی (HTML) |
| سیپ | تغییر پاراگراف داخلی |
| ید | پاراگراف داخلی یانک |
| خیط | پاراگراف یانک (از جمله Newline) |
VIM چندین پرونده
بافش
| جدید | جدید |
|---|---|
| : e پرونده | یک فایل را در یک بافر جدید ویرایش کنید |
| : bn | به بافر بعدی بروید |
| : bp | به بافر قبلی بروید |
| : BD | حذف پرونده از لیست بافر |
| : B 5 | بافر شماره 5 را باز کنید |
| : B File | با فایل به یک بافر بروید |
| : ls | همه بافرهای باز را لیست کنید |
| : پرونده SP | پنجره باز و تقسیم |
| : در مقابل پرونده | پنجره باز و به صورت عمودی تقسیم می شود |
| : پنهان | این بافر را پنهان کنید |
| : WN | پرونده را بنویسید و به بعدی بروید |
| : Tab BA | همه بافرها را به صورت زبانه ویرایش کنید |
ویندوز
| جدید | جدید |
|---|---|
| حرف | پنجره |
| حرفهای | پنجره تقسیم به صورت عمودی |
| حرف | ویندوز را تغییر دهید |
| سعدی | یک پنجره را ترک کنید |
| حرف | وارد یک برگه جدید شوید |
| x | تعویض جریان با بعدی |
| – / + | کاهش/افزایش قد |
| < /> | کاهش/افزایش عرض |
| = | به همان اندازه بالا و گسترده |
| ساعت / ل | به پنجره سمت چپ/راست بروید |
| j / k | به پنجره بالا/پایین بروید |
زبانه
| میانبر | شرح |
|---|---|
| : موضوع [file] | پرونده را در یک برگه جدید ویرایش کنید |
| : TABF [file] | اگر در برگه جدید وجود دارد باز شود |
| : TABC | بستن برگه فعلی |
| : نقطه | بسته های دیگر را ببندید |
| : زبانه ها | لیست همه برگه ها |
| : TABR | به برگه اول بروید |
| : سفره | به برگه Last بروید |
| : TABM 0 | حرکت به موقعیت 0 |
| : tabn | به برگه بعدی بروید |
| : TABP | به برگه قبلی بروید |
حالت عادی
| میانبر | شرح |
|---|---|
| GT | به برگه بعدی بروید |
| GT | به برگه قبلی بروید |
| 2 گرم | به برگه شماره 2 بروید |
VIM را جستجو کنید و جایگزین کنید
جستجو
| جدید | جدید |
|---|---|
| /foo | به جلو جستجو کنید |
| /foo \ c | جستجو رو به جلو (مورد غیر حساس) |
| ؟ foo | جستجو به عقب |
| /\ v \ d+ | جستجو با regex |
| حرف | الگوی جستجوی تطبیق بعدی |
| حرف | مسابقه قبلی |
| * | جستجوی کلمه فعلی به جلو |
| # | جستجوی کلمه فعلی به عقب |
جایگزین خط
`
:[range]s/{pattern}/{str}/[flags]
`
| :s/old/new | Replace first |
| :s/old/new/g | Replace all |
| :s/\vold/new/g | Replace all with regex |
| :s/old/new/gc | replace all (Confirm) |
| :s/old/new/i | Ignore case replace first |
| :2,6s/old/new/g | Replace between lines 2-6 |
Replace FILE
`
:%s/{pattern}/{str}/[flags]
`
| :%s/old/new | Replace first |
| :%s/old/new/g | Replace all |
| :%s/old/new/gc | Replace all (Confirm) |
| :%s/old/new/gi | Replace all (ignore case) |
| :%s/\vold/new/g | Replace all with regex |
Ranges
| – | – |
|---|---|
| % | Entire file |
| ’<,’> | Current selection |
| 5 | Line 5 |
| 5,10 | Lines 5 to 10 |
| $ | Last line |
| 2,$ | Lines 2 to Last |
| . | Current line |
| ,3 | Next 3 lines |
| -3, | Forward 3 lines |
Global command
`
:[range]g/{pattern}/[command]
`
| :g/foo/d | Delete lines containing foo |
| :g!/foo/d | Delete lines not containing foo |
| :g/^\s*$/d | Delete all blank lines |
| :g/foo/t$ | Copy lines containing foo to EOF |
| :g/foo/m$ | Move lines containing foo to EOF |
| :g/^/m0 | Reverse a file |
| :g/^/t. | Duplicate every line |
Inverse :g
`
:[range]v/{pattern}/[command]
`
| :v/foo/d | Delete lines not containing foo(also :g!/foo/d) |
Flags
| – | – |
|---|---|
| g | Replace all occurrences |
| i | Ignore case |
| I | Don’t ignore case |
| c | Confirm each substitution |
Substitute expression (magic)
| – | – |
|---|---|
| & | \0 |
| \1…\9 | Replace with the group 0-9 |
| \u | Uppercase next letter |
| \U | Uppercase following characters |
| \l | Lowercase next letter |
| \L | Lowercase following characters |
| \e | End of \u, \U, \l and \L |
| \E | End of \u, \U, \l and \L |
Examples
`
:s/a|b/xxx\0xxx/g # Modifies “a b” to “xxxaxxx xxxbxxx”
:s/test/\U& file/ # Modifies “test” to “TEST FILE”
:s/(test)/\U\1\e file/ # Modifies “test” to “TEST file”
:s/\v([abc])([efg])/\2\1/g # Modifies “af fa bg” to “fa fa gb”
:s/\v\w+/\u\0/g # Modifies “bla bla” to “Bla Bla”
:s/\v([ab])|([cd])/\1x/g # Modifies “a b c d” to “ax bx x x”
:%s/./\L&/ # Modifies “HTML” to “html”
:s/\v<(.)(\w)/\u\1\L\2/g # Make every first letter of a word uppercase
:%s/^(.)\n\1/\1/ # Remove duplicate lines
:%s/<\/=(\w+)>/\U&/g # Convert HTML-Tags to uppercase
:g/^pattern/s/$/mytext # Find and append text to the end
:g/pattern/norm! @i # Run a macro on matching lines
/^(.)(\r\?\n\1)+$ # View the duplicates lines
/\v^(.*)(\r?\n\1)+$ # View the duplicates lines (very magic)
:v/./,/./-j # Compress blank lines into a blank line
:g//,//d # Delete inclusively from to
`
Vimdiff
Usage
`
$ vimdiff file1 file2 [file3]$ vim -d file1 file2 [file3]
`
Editing
`
:[range]diffget [bufspec]:[range]diffput [bufspec]
`
| Shortcut | Description |
|---|---|
| do / :diffget | Obtain (get) difference |
| dp / :diffput | Put difference |
| :dif | Re-scan differences |
| :diffo | Switch off diff mode |
| :1,$+1diffget | Get all differences |
| ZQ | Quit without changes |
See: Ranges
Folds
| Shortcut | Description |
|---|---|
| zo / zO | Open |
| zc / zC | Close |
| za / zA | Toggle |
| zv | Open folds for this line |
| zM | Close all |
| zR | Open all |
| zm | Fold more (foldlevel += 1) |
| zr | Fold less (foldlevel -= 1) |
| zx | Update folds |
Jumping
| Shortcut | Description |
|---|---|
| ]c | Next difference |
| [c | Previous difference |
Miscellaneous
Case
| Shortcut | Description |
|---|---|
| vU | Uppercase character |
| vu | Lowercase character |
| ~ | Toggle case character |
| viw U | Uppercase word |
| viw u | Lowercase word |
| viw ~ | Toggle case word |
| VU / gUU | Uppercase line |
| Vu / guu | Lowercase line |
| V~ / g~~ | Toggle case line |
| gggUG | Uppercase all text |
| ggguG | Lowercase all text |
| ggg~G | Toggle case all text |
Jumping
| Shortcut | Description |
|---|---|
| Go back to previous | |
| Go forward | |
| gf | Go to file in cursor |
| ga | Display hex, ascii value |
Misc command-lines
| – | – |
|---|---|
| :h | Help open help view |
| :edit! | Reload current file |
| :2,8m0 | Move lines 2-8 to 0 |
| :noh | Clear search highlights |
| :sort | Sort lines |
| :ter | Open a terminal window |
| :set paste | Enable Insert Paste sub-mode |
| :set nopaste | disable Insert Paste sub-mode |
| :cq | Exiting with an error(aborting Git) |
Navigating
| Shortcut | Description |
|---|---|
| % | Nearest/matching {[()]} |
| [( | [{ |
| ]) | ]{ |
| [m | Previous method start |
| [M | Previous method end |
Counters
| Shortcut | Description |
|---|---|
| Increase number | |
| Decrease number |
Tags
| Shortcut | Description |
|---|---|
| :tag Classname | Jump to first definition of Classname |
| Jump to definition | |
| g] | See all definitions |
| Go back to last tag | |
| Back/forward | |
| :tselect Classname | Find definitions of Classname |
| :tjump Classname | Find definitions of Classname (auto-select 1st) |
Formatting
| – | – |
|---|---|
| :ce 8 | Center lines between 8 columns |
| :ri 4 | Right-align lines at 4 columns |
| :le | Left-align lines |
See :help formatting
نشان
| میانبر | شرح |
|---|---|
| `^ | آخرین موقعیت مکان نما در حالت درج |
| ` | آخرین تغییر در بافر فعلی |
| `” | آخرین بافر فعلی خارج شده |
| `0 | در آخرین پرونده ویرایش شده |
| '' | بازگشت به خط در بافر فعلی که از آنجا پرید |
|
Back to position in current buffer where jumped from |
| `[ | To beginning of previously changed or yanked text |
| `] | To end of previously changed or yanked text |
| `< | To beginning of last visual selection |
| `> | To end of last visual selection |
| ma | Mark this cursor position as a |
| `a | Jump to the cursor position a |
| ‘a | Jump to the beginning of the line with position a |
| d’a | Delete from current line to line of mark a |
| d`a | Delete from current position to position of mark a |
| c’a | Change text from current line to line of a |
| y`a | Yank text from current position to position of a |
| :marks | List all current marks |
| :delm a | Delete mark a |
| :delm a-d | Delete marks a, b, c, d |
| :delm abc | Delete marks a, b, c |
Calculator
| Shortcut | Description |
|---|---|
| = 7*7 | Shows the result |
| = 10/2 | Shows the result |
Do this in INSERT mode
Shell
| – | – |
|---|---|
| :! | Interpret Shell Command |
| :r! | Read in output of shell |
| :r!date | Insert date |
| :!!date | Replace current line with date |
Command line
| Shortcut | Description |
|---|---|
| Insert current word into the command line | |
| “ | Paste from ” register |
| Auto-completion of path in insert mode |
Tricks
Remove duplicate lines
:sort | %!uniq -u
برای شماره گذاری خطوط موجود در پرونده
:%!cat -n
کل Doc را در کلیپ بورد کپی کنید
:%w !pbcopy # Mac OS X
:%w !xclip -i -sel c # GNU/Linux
:%w !xsel -i -b # GNU/Linux
همچنین ببینید



