Питання Швидко відтінку кількох рядків в vi


Має бути тривіальним, і це може навіть бути в допомозі, але я не можу зрозуміти, як перейти на неї. Як швидко відтворити кілька рядків у ві


1969
2017-10-25 03:27


походження




Відповіді:


Використовувати > команда Щоб відступити 5 рядків, 5>>. Щоб позначити блок рядків та відступити його, Vjj> вставити 3 рядки (тільки vim). Щоб відступити блок фігурних дужок, покладіть курсор на одну з фігурних фігурних фігур та використовуйте >%.

Якщо ви копіюєте блоки тексту навколо і вам потрібно вирівняти відступ блоку в новому місці, скористайтеся ]р замість просто р. Це вирівнює вставлений блок із навколишнім текстом.

Крім того, shiftwidth Налаштування дозволяє вам контролювати кількість прогалин у відступу.


2324
2017-10-25 03:28



<shift> -v також працює для вибору рядка у Vim. - akdom
Я використовую> i} (відступ внутрішнього {} блоку). Працює в vim. Не впевнений, що він працює в vi. - R. Martinho Fernandes
Моя проблема (в gVim) полягає в тому, що команда> вводить набагато більше 2 заголовків (я хочу лише дві пробіли, але> відступ щось на зразок 5 заголовків) - Kamran Bigdely
@ Камран: дивіться shiftwidth налаштування способу змінити це. - Greg Hewgill
@MattStevens: Ви можете знайти розширене обговорення цього явища тут: meta.stackexchange.com/questions/9731/... - Greg Hewgill


Ця відповідь узагальнює інші відповіді та коментарі цього питання та додає додаткову інформацію на основі Vim документація і Вім вікі. Для стислості ця відповідь не відрізняє Ві і Vim-специфічні команди.

У наведених нижче командах "повторний відступ" означає "рядки відступу відповідно до вашої параметри відступу" 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 3 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

Список літератури


887
2018-03-06 17:29



Обидва ці відповіді, і той, і вище, були чудовими. Але я поставив +1, оскільки він нагадав мені оператора "dot", який повторює останню команду. Це надзвичайно корисно при необхідності відступити весь блок декількох зсувних просторів (або відступів) без необхідності продовжувати натискати >}. Спасибі довго - Amit
5 >> рядки відступ 5: ця команда відтворює п'ятий лінія, а не 5 рядків. Може це пов'язано з налаштуваннями VIM, чи ваша формулювання неправильна? - Wipqozn
@Wipqozn - Це дивно. Це, безумовно, віддає наступні п'ять рядків для мене, перевірено на Vim 7.2.330. - ire_and_curses
> 42гг Відступ від того, де ви знаходитесь, до рядка 42. - Steve
Велике резюме! Також зауважте, що "вхідний блок всередину" і "відступ всього блоку" (<i {> а {і т. Д.)) Також працює з дужками та дужками:> a (<i) і т. Д. (І поки я на ньому, Крім <>, вони також працюють з d, c, y тощо) - aqn


Великий вибір буде

gg=G

це дійсно швидко, і все стає відступним ;-)


116
2018-01-20 21:11



Я маю файл XML і включив підсвічування синтаксису. Набрати gg=G просто поміщає кожну лінію з позиції 1. Всі білі простори були вилучені. Чи є щось інше для XML? - asgs
stackoverflow.com/questions/7600860/... - Johan
Я думаю set cindent повинен бути в vimrc або бігти :set cindentперед виконанням цієї команди - Amanuel Nega
Я думаю, що перший повинен бути встановлений кицька. і @asgs я думаю, що це працює тільки для мов програмування cstyle. - Amanuel Nega


Також спробуйте це для C-відступи відступи, робити :help = для отримання додаткової інформації:

={

Це автоматично відступить від поточного блоку коду, в якому ви знаходитесь.

Або просто:

==

автоматично відступити поточну лінію.


105
2017-10-25 04:21



не працює для мене, просто знімає мій курсор до лінії над відкритою фігуркою 'поточного блоку коду я є'. - underscore_d


Ключі-преса для більшості візуальних людей:

  1. Введіть командний режим:
    Втеча 

  2. Переміщення до початку району до відступу:
    чjкл 

  3. Запустіть блок:
    проти

  4. Перемістити до кінця області, щоб відступити:
    чjкл 

  5. (Необов'язково) Введіть кількість бажаних рівнів відступу
    0..9

  6. Виконати відступ у блоці:
    >


73
2017-10-25 09:16



Це чудово, але використовує пробіли, а не вкладки. Будь-який можливий спосіб це виправити? - Shane Reustle
Якщо він використовує пробіли замість вкладок, то його, ймовірно, тому, що у вас є відступ призначено для використання пробілів. =) - Kent Fredric
Коли параметр 'expandtab' вимкнено (це за замовчуванням), Vim використовує <Tab> s максимально можливо, щоб зробити абзац. (: help:>) - Kent Fredric
Єдиний параметр VIM, пов'язаний з вкладками / пробілами, який я змінив, це: встановити tabstop = 3. Це насправді вставляє це кожен раз, коли я використовую >>: "<tab> <пробіл> <пробіл>". Те ж саме з відступом блоку. Будь-які ідеї? - Shane Reustle
Три параметри, які ви хочете переглянути для "пробілів проти вкладок", - 1. tabstop 2. widthwidth 3. expandtab. Ви, напевно, маєте "widthwidth = 5 noexpandtab", тому "вкладка" складається з 3 пробілів, а рівень відступу - "5", тому він складається з 5 з 1 вкладкою та 2 пробілами. - Kent Fredric


Окрім відповіді, вже даного та прийнятого, також можна розмістити маркер, а потім відступити все від поточного курсора до маркера. Таким чином, введіть ma де ви хочете, щоб верхня частина вашого відступу блоку, курсор вниз, наскільки вам потрібно, а потім введіть >'a (зверніть увагу, що "a"можна замінити на будь-яке дійсне маркерне ім'я). Це іноді простіше, ніж 5>> або vjjj>.


62
2017-10-25 04:00



Це дійсно корисно. Я збираюся шукати, що все працює з цим. Я знаю, а-а-а-а, а що ще? - user606723
Це дуже корисно, оскільки це дозволяє уникнути необхідності підрахувати, скільки рядків ви хочете відступити. - ziggy


Майстер всіх команд - це
gg=G

Це відступ всього файлу!

Нижче наведено деякі прості та елегантні команди, які швидко використовуються для відступу рядків у Vim або gVim.

Щоб відступити поточну лінію
==

Щоб відступити всі рядки нижче поточної лінії

=G

Відступити n лінії нижче поточної лінії

n==

Наприклад, до відступу 4 рядки нижче поточної лінії

4==

Щоб відступити блок коду, перейдіть до однієї з дужок і скористайтеся командою

=%

Це найпростіші, але потужні команди для відступу кількох рядків.


60
2018-04-18 18:41



Це просто vim, ні vi. - rojomoke
@rojomoke: Ні, він також працює у ві - Sagar Jain
Не в моїх коробках Solaris або AIX це не так. Рівний ключ завжди був одним з моїх стандартних спеціальних макропосів. Ви впевнені, що ви не дивитеся на vim це пов'язано з як vi? - rojomoke
Так, у Linux, ві майже завжди є посиланням на vim. Спробуйте запустити команду: ve команда всередині vi. - rojomoke
Я люблю такі відповіді: чіткі, чіткі та лаконічні. Працював для мене в Debian Jessie. Дякую, @SJain - datelligence


Перейти до початку тексту

  • натисніть проти для візуального режиму.
  • використовувати вгору/вниз стрілка, щоб виділити текст.
  • натисніть = щоб відступити всі виділені вам лінії.

29
2017-11-04 22:57