Це має бути тривіально, і це може бути навіть у допомозі, але я не можу зрозуміти, як орієнтуватися в ньому. Як швидко відтворити кілька рядків у vi?
Це має бути тривіально, і це може бути навіть у допомозі, але я не можу зрозуміти, як орієнтуватися в ньому. Як швидко відтворити кілька рядків у vi?
Відповіді:
Використовуйте >команду. Щоб зробити відступ п'ять рядків, 5>>. Щоб позначити блок рядків і відступити його, Vjj>відступіть три рядки (лише Vim). Для відступу блоку фігурних дужок поставте курсор на один із фігурних дужок та використовуйте >%або з будь-якого місця всередині блоку >iB.
Якщо ви копіюєте текстові блоки навколо та вам потрібно вирівняти відступ блоку в новому місці, використовуйте ]pзамість просто p. Це вирівнює вкладений блок з оточуючим текстом.
Також shiftwidth
налаштування дозволяє контролювати кількість пробілів для відступу.
shiftwidth
налаштування способу змінити це.
Ця відповідь узагальнює інші відповіді та коментарі до цього питання, і вона додає додаткову інформацію на основі документації Vim та вікі Vim . Для стислості ця відповідь не розрізняє Vi-конкретні команди.
У наведених нижче командах "повторне відступ" означає "рядки відступу відповідно до ваших налаштувань відступу ". shiftwidth
є основною змінною, яка контролює відступ.
Загальні команди
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
Ви можете замінити {
з }
або B
, наприклад , =iB
є допустимим командний блок відступу. Погляньте на "Вступ блоку коду", щоб побачити приклад, щоб спробувати ці команди.
Також пам’ятайте про це
. Repeat last command
, тому команди відступу можна легко та зручно повторити.
Повторне відступ повних файлів
Ще одна поширена ситуація - вимагає виправлення відступів у вихідному файлі:
gg=G Re-indent entire buffer
Ви можете поширити цю ідею на кілька файлів:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Або кілька буферів:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
У візуальному режимі
Vjj> Visually mark and then indent three lines
У режимі вставки
Ці команди застосовуються до поточного рядка:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Ex команди
Вони корисні, коли потрібно відступити певний діапазон рядків, не переміщуючи курсор.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Відступ за допомогою маркерів
Інший підхід - через маркери :
ma Mark top of block to indent as marker 'a'
... перемістити курсор до кінця місця
>'a Indent from marker 'a' to current location
Змінні, що регулюють відступ
Ви можете встановити їх у файлі .vimrc .
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
Vim має інтелектуальне відступ на основі файлів. Спробуйте додати це до свого .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Список літератури
>}
. Дякую довго
Великим вибором буде:
gg=G
Це дуже швидко, і все стає відступом ;-)
gg=G
проставляє кожен рядок, починаючи з позиції 1. Усі білі проміжки були видалені. Чи є ще щось специфічне для XML?
set cindent
слід мати vimrc або слід запустити :set cindent
перед виконанням цієї команди
Крім того, спробуйте це для C-відступи відступу. Зробіть :help =
для отримання додаткової інформації:
={
Це автоматично відступить поточний блок коду, в якому ви знаходитесь.
Або просто:
==
для автоматичного відступу поточного рядка.
Ключові натискання для більш візуальних людей:
Введіть командний режим:
Escape
Перемістіться до початку області для відступу:
hjkl↑↓←→
Почати блок:
v
Перемістіть до кінця області для відступу:
hjkl↑↓←→
(Необов’язково) Введіть потрібну кількість відступів
0..9
Виконай відступ на блоці:
>
Майстер всіх команд - це
gg=G
Це відступає весь файл!
Нижче наведено кілька простих і елегантних команд, які швидко використовуються для відступу рядків у Vim або gVim.
Для відступу поточного рядка
==
Для відступу всіх рядків нижче поточного рядка
=G
Для відступу n
рядків нижче поточного рядка
n==
Наприклад, відступити 4 рядки нижче поточного рядка
4==
Для відступу блоку коду перейдіть до одного з дужок і скористайтесь командою
=%
Це найпростіші, але потужні команди для відступу декількох рядків.
vim
, ні vi
.
vim
те, з чим пов'язано vi
?
Окрім вже наданої та прийнятої відповіді, також можна розмістити маркер, а потім відкласти все, від поточного курсору до маркера.
Таким чином, введіть ma
туди, де ви хочете вгору відступного блоку, курсор вниз, наскільки вам потрібно, а потім введіть >'a
(зверніть увагу, що " a
" може бути замінено будь-яке дійсне ім'я маркера). Іноді це простіше, ніж 5>>
або vjjj>
.
Перейдіть до початку тексту
Як і пропоновані рішення, мені подобається одночасно робити абзаци >}
Коли ви вибираєте блок і використовуєте >для відступу, відступи потім повертаються до звичайного режиму. Я маю це у своєму .vimrc файлі:
vnoremap < <gv
vnoremap > >gv
Це дозволяє відступити ваш вибір стільки разів, скільки вам потрібно.
Припустимо, ви використовуєте 2 пробіли для відступу коду. Тип:
:set shiftwidth=2
Тоді:
Ви отримуєте ідею.
( Порожні рядки не отримають відступів, що, на мою думку, є приємним. )
Я знайшов відповідь у документації (g) vim для відступів блоків:
:help visual-block
/indent
Якщо ви хочете надати команду підрахунку, зробіть це безпосередньо перед тим, як ввести символ оператора: "v {move-around} 3>" (перемістіть рядки 3 відступи праворуч).
Краса інтерфейсу Vim полягає в його консистенції. Команди редагування складаються з команди та переміщення курсору. Рухи курсору завжди однакові:
'
.Отже, щоб використовувати vim, ви повинні навчитися переміщувати курсор і запам’ятовувати репертуар команд, як, наприклад, >відступити (і <«перехитрити»).
Таким чином, для відступу рядки з позиції курсора в верхній частині екрану ви робите >H, >Gщоб зробити відступ в нижній частині файлу.
Якщо замість того, щоб вводити текст >H, ви dHвидаляєте той самий блок рядків cHдля його заміни тощо.
Деякі рухи курсору краще підходять до певних команд. Зокрема, %команда зручна для відступу цілого блоку HTML або XML. Якщо у файлі є підкреслений синтаксис ( :syn on
), то встановлення курсору в тексті тегу (наприклад, у "i" <div> і введення >%буде відступати до тега закриття </div>).
Ось так працює Vim: треба пам’ятати лише рухи курсору та команди та способи їх змішування. Тож моя відповідь на це питання полягала б у тому, щоб "перейти до одного кінця блоку рядків, на який потрібно відступити, а потім введіть >команду та рух до іншого кінця блоку", якщо відступ трактується як зміщення рядків, =якщо відступ інтерпретується як у симпатичному друку.
Зробити це:
$vi .vimrc
І додайте цей рядок:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Це лише для файлу cpp. Ви можете зробити це для іншого типу файлу, також просто змінивши тип файлу ...
За допомогою norm i
команди можна вставити даний текст на початку рядка. Щоб вставити 10 пробілів перед рядками 2-10:
:2,10norm 10i
Пам'ятайте, що в кінці команди повинен бути символ пробілу - це буде символ, який ми хочемо вставити. Ми також можемо відступити рядок з будь-яким іншим текстом, наприклад, відступити кожен рядок у файлі з п'ятьма символами підкреслення:
:%norm 5i_
Або щось ще більш фантазійне:
:%norm 2i[ ]
Більш практичним прикладом є коментування коду Bash / Python / тощо з символом #:
:1,20norm i#
Для повторного відступу використовувати xзамість i. Наприклад, щоб видалити перші 5 символів з кожного рядка:
:%norm 5x
Швидкий спосіб зробити це, VISUAL MODE
використовуючи той самий процес, що і коментування блоку коду.
Це корисно, якщо ви хочете не змінювати свої директиви shiftwidth
або використовувати якісь set
директиви і є досить гнучкими для роботи з TABS або SPACES або будь-яким іншим символом.
-- VISUAL MODE --
:
для переходу на підказкуЗаміна 3 провідними пробілами:
:'<,'>s/^/ /g
Або заміна провідних вкладок:
:'<,'>s/^/\t/g
Коротке пояснення:
'<,'>
- В межах візуально вибраного діапазону
s/^/ /g
- Вставте 3 пробіли на початку кожного рядка в межах всього діапазону
(або)
s/^/\t/g
- Вставити Tab
на початку кожного рядка в межах всього діапазону
Мені подобається маркувати текст для відступу:
PS: ви можете використовувати :'a,'zтехніку для позначення діапазону для будь-якої операції (d, y, s /// тощо), де ви можете використовувати лінії, цифри або %.
:help left
У ex mode
ви можете використовувати :left
або , :le
щоб вирівняти рядки зазначеної суми. Зокрема, :left
буде вирівнювати ліві лінії в діапазоні [діапазон]. Він встановлює відступ у рядках на [відступ] (за замовчуванням 0).
:%le3
або :%le 3
або :%left3
або :%left 3
вирівняє весь файл, додавши три пробіли.
:5,7 le 3
вирівняють лінії 5 по 7, додавши їх до трьох пробілів.
:le
без будь-якого значення або :le 0
залишиться вирівнювати з прокладкою 0.
Це працює у Vim та gVim.
:'<,'>le4
вставити пробіли. Дякую!
Для мене рішення MacVim (Visual) було, виберіть мишкою та натисніть ">", але після введення наступних рядків у "~ / .vimrc", оскільки мені подобаються пробіли замість вкладок:
set expandtab
set tabstop=2
set shiftwidth=2
Також корисно мати можливість викликати MacVim з командного рядка (Terminal.app), тому оскільки у мене є наступний довідковий каталог "~ / bin", де я розміщую скрипт під назвою "macvim":
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
І звичайно в "~ / .bashrc":
export PATH=$PATH:$HOME/bin
MacPorts багато спілкується з "~ / .profile", тому змінна середовища PATH може отримати досить довгий.
5==
відступить п'ять рядків від поточного положення курсору.
Таким чином, ви можете ввести будь-яке число раніше ==
. Він відступить кількість рядків. Це в командному режимі.
gg=G
буде відступати весь файл зверху вниз.
Я не знайшов методу, який використовую в коментарях, тому поділюсь ним (думаю, тільки Vim):
Це корисно, коли ви не хочете змінювати параметри відступу / вкладки vimrc
або пам'ятати їх, щоб змінити їх під час редагування.
Для відмови я використовую той самий Ctrl+ Vблок select, щоб вибрати пробіли та видалити його D.
Я не знаю, чому так важко знайти просту відповідь, як ця ...
Мені самому довелося багато боротися, щоб це знати. Це дуже просто:
.vimrc
файл під домашнім каталогом.Додайте цей рядок
set cindent
у вашому файлі, де ви хочете правильно зробити відступ.
У звичайному / командному режимі
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
Наприклад,
14,21> shifts line number 14 to 21 to one tab
Збільшити символ ">" для додаткових вкладок.
Наприклад,
14,21>>> for three tabs
:set number
для перемикання номерів рядків (вони за замовчуванням вимкнено ) або ввести set number
vimrc.
Багато використовуючи Python, я вважаю, що мені потрібно часто змінювати блоки на більш ніж один відступ. Це можна зробити за допомогою будь-якого з методів вибору блоку, а потім просто введіть кількість відступів, які ви хочете перейти безпосередньо перед>
Наприклад, V5j3>
три рази буде відступати п'ять рядків - це 12 пробілів, якщо ви будете використовувати чотири пробіли для відступів.
Варіант 1: Введіть блок коду в vi на три пробіли в режимі Visual Block:
Виберіть блок коду, який потрібно відступити. Зробіть це, використовуючи Ctrl+Vв звичайному режимі та стрілку вниз, щоб вибрати текст. Під час його вибору введіть :
команду для блоку вибраного тексту.
У командному рядку з’явиться таке: :'<,'>
Щоб встановити відступ на три пробіли, введіть le 3
та натисніть клавішу Enter. Ось що з’являється::'<,'>le 3
Вибраний текст одразу відступає на три пробіли.
Варіант 2: Введіть блок коду в vi на три пробіли в режимі Visual Line:
Будьте в звичайному режимі і натисніть наступні клавіші:
Vjjjj:le 3
Тлумачення того, що ви зробили:
V
означає почати вибір тексту.
jjjj
стрілки вниз чотири рядки, виділяючи чотири рядки.
:
повідомляє vi, що ви введете інструкцію для виділеного тексту.
le 3
означає відступ тексту, виділеного трьома рядками.
Вибраний код негайно збільшується або зменшується до відступу на три пробіли.
Варіант 3: використовувати режим візуального блоку та спеціальний режим вставки для збільшення відступу:
Будьте в звичайному режимі, натисніть наступні клавіші:
Ctrl+V
jjjj
(натисніть пробіл п'ять разів)
Esc Shift+i
Весь виділений текст з відступом додається ще п’ять пробілів.
Я використовую візуальний вибір блочного режиму:
I
( Shift+ I), щоб увійти в режим вставки.Це не одноосібник. Це працює:
c
замість I
).vim-prettier
замість двигуна відступів за замовчуванням). В >
іншому випадку використання по-справжньому зобразить форматування, зроблене Prettier.
Для відступу всього файлу на чотири:
esc 4G=G
Джерело: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html