Как заполнить строку символом x до столбца y с помощью Vim - PullRequest
27 голосов
/ 29 июля 2010

Как я могу заполнить остаток строки указанным символом до определенного столбца, используя Vim? Например, представьте, что курсор находится на четвертом столбце, и я хочу заполнить оставшуюся часть текущей строки штрихами до столбца 80. Как мне это сделать?

Ответы [ 8 ]

57 голосов
/ 13 сентября 2012

Вы можете сделать 80Ax<Esc>d80| для более простого решения.

22 голосов
/ 04 августа 2010

Вот функция для реализации того, что вы просите, и немного больше.

  • Заполняет строку от текущего конца строки, а не от позиции курсора
  • Это заставляет один пробел между тем, что в настоящее время на линии и повторяющихся символов
  • Позволяет указать любую строку, чтобы заполнить оставшуюся часть строки
  • Он использует настройку vim textwidth, чтобы определить, какой длины должна быть линия (а не просто предположить 80 символов)

Функция определяется следующим образом:

" fill rest of line with characters
function! FillLine( str )
    " set tw to the desired total length
    let tw = &textwidth
    if tw==0 | let tw = 80 | endif
    " strip trailing spaces first
    .s/[[:space:]]*$//
    " calculate total number of 'str's to insert
    let reps = (tw - col("$")) / len(a:str)
    " insert them, if there's room, removing trailing spaces (though forcing
    " there to be one)
    if reps > 0
        .s/$/\=(' '.repeat(a:str, reps))/
    endif
endfunction

Вставьте это в ваш .vimrc и создайте для него отображение, например,

map <F12> :call FillLine( '-' )

Затем вы можете нажать F12, чтобы применить дефисы к текущей строке

Примечание: это, вероятно, может быть легко расширено, чтобы воздействовать на выбор в режиме VISUAL, но в настоящее время работает только для отдельных строк. *

5 голосов
/ 29 июля 2010

Если я правильно понимаю вопрос, это можно сделать следующим образом: в обычном режиме вычтите текущую позицию столбца курсора из желаемого конечного столбца, затем введите результат, затем «i», чтобы перейти в режим вставки, затем символ, который вы хочу заполнить пространство. Завершите, вернувшись в нормальный режим. Например, если курсор в четвертом столбце находится в обычном режиме, если вы хотите заполнить оставшуюся часть строки до столбца 80 штрихами, введите 76i-, затем Esc или Ctrl- [, чтобы вернуться в нормальный режим. Это должно привести к 76 штрихам, начинающимся в столбце 4 и заканчивающимся в столбце 79.

3 голосов
/ 17 октября 2014

Если для параметра virtualedit установлено значение block или all, вы можете создать визуальный выбор (даже через пустое пространство) до нужного столбца:
v80| (если virtualedit=all) или
<c-v>80| (если virtualedit=block)

Затем замените выделенную область штрихами: r-

Вероятно, полезно запустить визуальный режим после последнего символа в строке, нажав l, чтобы избежать перезаписи последнего символа в строке. Если вы не используете virtualedit=all, вам нужно установить virtualedit+=onemore, чтобы вы могли переместить один символ за конец строки в обычном режиме.

2 голосов
/ 19 марта 2018

Один из других ответов здесь: 80Ax<Esc>d80|.Первоначально я начал использовать его как отображение клавиш следующим образом:

nnoremap <leader>- 80A-<Esc>d80<bar>

... но мне не понравилось, как он оставляет курсор в конце строки.Кроме того, для узких окон (например, чуть шире, чем 80 ячеек), это заставляет все окно прокручиваться по горизонтали, потому что курсор ненадолго переходит на конец длинной строки, прежде чем обрезается до 80. Это частично разрешается возвращениемначало строки:

nnoremap <leader>- 80A-<Esc>d80<bar>0

... но затем экран кратковременно «мигает», когда курсор переходит за экран и назад (таким образом, прокручивая окно на короткое время вправо и назад).Чтобы предотвратить это, мы можем временно использовать режим обратной вставки (:h revins или :h ri), чтобы держать курсор на экране во время добавления.Вот полная команда для сопоставления клавиш:

nnoremap <leader>- :set ri<cr>80A-<esc>81<bar>d$0:set nori<cr>
2 голосов
/ 29 июля 2010

Этот ответ отвечает на ваш вопрос.Просто замените вычисление len нужным номером столбца (возможно, +/- 1, я никогда не помню) и удалите двойные кавычки, добавленные подстановкой.

0 голосов
/ 27 июня 2018

Я действительно наткнулся на это, пытаясь выровнять столбцы. На всякий случай, если кто-то еще сделает то же самое, этот поток может быть полезен: Как вставить пробелы до столбца X, чтобы выстроить строки в столбцы?

0 голосов
/ 13 сентября 2012

Вы можете сначала вставить тире, а затем перейти к первому символу и ввести свой текст в режиме замены: 80i- Esc 0R

если вы не хотите вводить текст, сначала удалите строку с 0D, используйте 80i- Esc , чтобы вставить тире, и 0R CTRL + r"для вставки содержимого незарегистрированного регистра в режиме замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...