Подтвердить что ты не робот

Как заполнить строку символом x до столбца y, используя Vim

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

4b9b3361

Ответ 1

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

  • Он заполняет линию с текущего конца строки, а не на позицию курсора
  • Он заставляет одно пространство между тем, что в настоящее время находится на линии, и повторяющимися символами
  • Он позволяет вам указать любую строку, чтобы заполнить остальную часть строки
  • Он использует настройку 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 to insert
    let reps = (tw - col("$")) / len(a:str)
    " insert them, if there 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, но в настоящее время работает только для одиночных строк. *

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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