Режим Vim Visual: выберите текущий блок под курсором
Учитывая, что у нас есть текущие данные:
ID NAME AGE
1 Joan 29
2 Peterson 16
3 Hunt 47
4 Wenche 12
5 Kennedy 29
6 Lottie 31
И курсор на N
в NAME
как мне выбрать текст, чтобы, если |
это разделители визуального блока, выделение должно быть таким
ID |NAME | AGE
1 |Joan | 29
2 |Peterson| 16
3 |Hunt | 47
4 |Wenche | 12
5 |Kennedy | 29
6 |Lottie | 31
Конечный пробел после каждого элемента соответствует ширине Peterson
не обязательно, но мне нужен быстрый способ выделить текущий блок, если он существует.
4 ответа
С курсором на N
из NAME
Я бы просто сделал следующее без особой заботы о гольфе:
<C-v>}hhhhhhhh
Но плагин textobj-column делает именно то, что вы хотите. Волшебно.
То же, что и ответ игончо, но без "магических чисел"
Ctrl-V, W, G
G идет прямо к последней строке файла без необходимости разбивать '9' несколько раз
Существуют сценарии, облегчающие эту задачу, но при условии, что вы хотите использовать raw vim, вот мой самый известный способ сделать это:
а. Убедитесь, что ваша последняя строка файла заполнена пробелами, что-то вроде этого:
"______________________________________"
,
затем перейдите к первой букве N в "Имя". Удар ctrl-v, w, 999999j
и столбец будет выбран.
Последняя строка должна быть заполнена пробелами, если ваш файл заканчивается новой строкой, поскольку в визуальном режиме нельзя выбрать части файла, которые не были созданы. если последняя строка является жизнеспособным контентом, вам это не нужно. ctrl-v+w
выбирает слово, затем 999999j
simple берет курсор "вниз" на 99999 строк (или меньше, если файл меньше).
Примечание. Вы увидите, что это выделение всего столбца, и пробелы немного отличаются от того, что вы указали (но вы сказали, что это неважно). Насколько мне известно, если вы хотите, чтобы столбец был выровнен по концу самого большого слова, а не по началу следующего, вам нужно будет вручную найти самый большой размер слова, выбрать визуальную длину и затем выполнить что-то вроде 99999j
,
Вот один из способов сделать это:
- Первое использование
control-v
войти в режим визуального блока - Затем введите
2j
спуститься на два ряда кPeterson
запись - Используйте нижний регистр
e
переместить выделение блока в конец словаPeterson
- Тип
4j
переместить выделение вниз на последние четыре строки
Изменить: Если вы действительно настаиваете на том, чтобы избегать "магических чисел", вы можете сделать что-то, как описано здесь: https://stackoverflow.com/questions/3736678/how-do-you-select-a-whole-column-in-visual-block-mode
:set nosol
(чтобыG
команда не будет возвращаться к первой строке при выборе визуального блока)control-v
/P
(вы сказали, что нет магических чисел, но не запретили поиск букв - если пробел не имеет решающего значения, вы можете проигнорировать это)e
(перейти к концу слова)G
(переместить выделение блока вниз)
Другие советы:
- если вам нужно повторно выбрать тот же блок позже, вы можете набрать
gv
v
используется для посимвольного визуального режима иV
для линии, в то время какcontrol-v
как указано выше для блочного визуального режима
Полезные ссылки (кроме интернета):
- Книга
Practical Vim
Дрю Нил действительно хорошо написано