2

У меня есть текстовые файлы стихов с номерами строк справа, которые выглядят так:

Bedded in store of rotten fig-leaves soft,   40
And corded up in a tight olive-frail,   
Some lump, ah God, of lapis lazuli, 
Big as a Jew’s head cut off at the nape,    
Blue as a vein o’er the Madonna’s breast    
Sons, all have I bequeathed you, villas, all,        45

Где пробелы между концами строк и номерами строк не согласованы. Как я могу переместить числа в определенный столбец, чтобы они совпали?

3 ответа3

5

Я хотел добиться в основном того же, но для определенных символов в программном коде. Символы могут появляться в любом месте строки, но я хотел, чтобы они (и все справа от них) появлялись в определенном столбце. Например:

refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;

Я хотел, чтобы это выглядело так:

refclkp                    : in std_logic;
refclkn                    : in std_logic;
hdinp_ch0                  : in std_logic;
hdinn_ch0                  : in std_logic;
hdoutp_ch0                 : out std_logic;

Т.е. со всеми : по конкретному столбцу (столбец 30 в данном случае). Вышеупомянутое не имело смысла для меня (это может работать, но я не использую визуальные вещи), но это дало мне ключ к решению:

:map H $?:<ctrl+Enter>Di                              <ctrl+Esc>029lP:s/\s*$//<ctrl+Enter>

Вы делаете биты <ctrl+Enter> и <ctrl+Esc> , удерживая Ctrl+Q и затем нажимая Enter или Esc. Появляется в команде как ^M или ^[ . Выше по существу делает это:

  1. Перейти в конец строки ($)
  2. посмотрите назад для первого ":" (?:<ctrl+Enter>)
  3. Удалите все с этой точки до конца строки (D)
  4. Вставьте 30 пробелов - так что я знаю, что достаточно пробелов, чтобы я мог перейти к столбцу 30 (i <ctrl+Esc>)
  5. Перейти к столбцу 30 - не уверен, почему мне нужно использовать «29» здесь, должно быть «функция» (029l)
  6. Вставьте удаленный текст из шага 3 (P)
  7. Очистите, удалив все конечные пробелы, созданные на шаге 4 (:s/\s*$//<ctrl+Enter>)

Я создал это как отображение, поэтому все, что мне нужно сейчас сделать, это нажать H, и текущая строка будет изменена!

4

Мощным методом решения проблем с vim является использование макросов и элементарных команд, потому что их проще запомнить, чем язык сценариев vim.

В этом случае я бы поместил курсор перед номером, который является последним словом в строке (для этого: $b); вставить много пробелов; удалите посторонние (если вы хотите использовать строку 61, выполните: 061ldw); перейти к следующей строке (чтобы сделать это: j).

Сначала нажмите qa чтобы начать запись макроса "a", затем нажмите эти клавиши выше (и никаких других) и нажмите q чтобы закончить запись. Теперь, чтобы использовать его, используйте @a для макроса "a"; после этого продолжайте нажимать @@ (повторите последний макрос), пока не дойдете до конца текста.

0

Другой метод для такого типа выравнивания столбцов выглядит так:

давайте возьмем приведенный выше пример,

до :

refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;

после :

refclkp       : in std_logic;
refclkn       : in std_logic;
hdinp_ch0     : in std_logic;
hdinn_ch0     : in std_logic;
hdoutp_ch0    : out std_logic;

Здесь я выровнял символ « : » в 15-м столбце. Для этого выполните следующие шаги:

  1. Перейти к первой строке (где мы должны начать изменения, здесь это " refclkp: in std_logic; ")

  2. Затем нажмите <Esc> чтобы перейти в обычный режим

  3. Прес эти ключи

    qa0f:i (Press the space bar more than 20 times)<Esc>15|dw<DownArrow>q

  4. Затем нажмите 4@a чтобы повторить то же самое для оставшихся 4 строк.

(Здесь пробелы больше 20 для нашей безопасности могут меняться в зависимости от ваших требований)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .