скопировать столбец и вставить в строку - PullRequest
1 голос
/ 23 апреля 2011

У меня есть файл со следующим содержимым:

    sensor_write_reg(client,0x57,0x00);
    sensor_write_reg(client,0x58,0x00);
    sensor_write_reg(client,0x59,0x00);
    sensor_write_reg(client,0xfe,0x00);
    sensor_write_reg(client,0x46,0x00);

Я хочу скопировать в столбец следующий текст в новый файл:

struct reg reg_table[] =
{
// paste here
}

int a;
int b;
int c;
// ...

the following content expected:
struct reg reg_table[] =
{
0xfe,0x01   
0x54,0x11
0x55,0x03
0x56,0x00
0x57,0x00
0x58,0x00
0x59,0x00
0xfe,0x00
0x46,0x00
}

int a;
int b;
int c;
// ...

В исходном файле я набираю CTRL+ v, чтобы войти в режим столбцов, выберите и скопируйте.Введите CTRL + W для ввода файла назначения и введите p для вставки.Тем не менее, вставленный контент переопределяет следующие утверждения.Это не я хочу.

0xfe,0x01
0x54,0x11}
0x55,0x03int a;
0x56,0x00int b;
0x57,0x00int c;
0x58,0x00

Есть ли какой-нибудь способ вставить его в режиме строки, в ряд новых строк?

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

К всегда вставьте что-нибудь, также вы можете использовать команду :put.

:put

Если вы хотите преобразовать в символьное или блочное значение, вы можете использовать функцию setreg(), как показано в этом vim tip , или использовать этот плагин, UnconditionalPaste .

0 голосов
/ 23 апреля 2011

Вы также можете попробовать макрос; после некоторых попыток я нашел это:

y:tabe^MP:%s/^.*\(0x\x\+,0x\x\+\).*$/\1/^MVggy:tabclose!^M^Wjp

(^M и ^W - возврат каретки и контроль-W)

Настройка вашего vim будет ...

  • одна вкладка с двумя окнами, разделенная на Horz (через C-W S)
  • sensor_write_reg-stuff в верхнем окне,
  • Вставьте сюда исходный код в нижний.
  • нижнее окно: попал в строку "вставить сюда"
  • верхнее окно: визуально выберите (теперь с заглавной V) строки, которые вы хотите
  • затем нажмите @q (если макрос сохранен в q; или просто введите команды на лету ...) и позвольте магии случиться ...

что здесь происходит?

  • y
    мы дергаем текст
  • :tabe^MP
    и откройте новую вкладку с пустым буфером, вставьте текст
  • (предупреждение: если у вас есть неназванный буфер, это не будет работать)
  • :%s/^.<em>(0x\x+,0x\x+).</em>$/\1/
    здесь мы фильтруем: выживут только две шестнадцатеричные цифры, разделенные запятой.
  • Vggy:tabclose!^M
    восстановить все, закрыть буфер (без сохранения)
  • (теперь мы вернулись к первой вкладке, все еще в верхнем окне)
  • ^Wjp
    Переместите одно окно вниз и вставьте.

Наконец, вы можете использовать kD для удаления строки "вставить сюда" ...

0 голосов
/ 23 апреля 2011

Блочное выделение не работает аналогично выделению.

Вы копируете текст из 6 строк, поэтому вам нужно освободить 6 строк для вставки. Попробуйте 6O<CR>p

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