2013-12-11 2 views
0

У меня есть файл с длинными строками и вам нужно увидеть/скопировать значения, которые находятся в определенном местоположении (-ях) для всего файла, но скопировать остальную часть строки.Копирование только значения в столбце n Vim

Если ширина текста достаточно мала, ~ 184 столбца, я могу использовать: set colorcolumnnum, чтобы выделить значение. Однако более 184 символов он получает немного громоздкую прокрутку.

Я пробовал: g/\% 1237c/y Z, для одной из позиций, в которой я нуждался, но это дергало всю линию.

например, для меньшего образца: g/\% 49c/y Z будет выдергивать все строки 1 и 2, но я хочу выдернуть или скопировать символ в этом столбце, то есть = в строке 1 и x в строке 2 .

vim: filetype=help foldmethod=indent foldclose=all modifiable noreadonly 
Table of Contents *sfcontents* *vim* *regex* *sfregex* 
*sfsearch* - Search specific commands 
|Ampersand-replaces-previous-pattern| 
|append-a-global-search-to-a-register| 
*sfHelp* Various Help related commands 
+0

Возможно, вы можете включить пример того, что находится в файле, который вы пытаетесь скопировать? Я не могу сказать из вопроса, что именно вы пытаетесь сделать. –

+0

Не думайте, что у меня есть возможность прикреплять файлы, и публикация примера шириной 1500 символов не будет делать этого :), но ответ после вашего ответа дал ответ. Файл выглядит следующим образом (режим Nowrap), и я хочу, чтобы U был его собственным, а конечный D, который в файле находится в позициях U = 56 и D = 265, другой файл имеет D в позиции 1265. 2929122011000000000006410240024097 U 000000 000000 00000000 D – Steve

ответ

1

Есть две проблемы с вашей командой :g:

  1. Для каждой соответствующей строки, курсор позиционируется на первой колонке. Поэтому, даже если вы столкнулись с определенным столбцом, эта позиция потеряна.
  2. Атом \%c фактически соответствует байт-индексам (что Vim несколько путает имена столбцов), поэтому ваше измерение будет отключено для символов Tab и не-ASCII. Используйте виртуальную колонку atom \%v.

Вместо :global, я хотел бы использовать :substitute с выражением замены, в идиомы, описанной в how to extract regex matches using vim:

:let t=[] | %s/\%49v./\=add(t, submatch(0))[-1]/g | let @@ = join(t, "\n") 

В качестве альтернативы, если установить мой ExtractMatches plugin, я бы, что короткая команда вызова :

:YankMatchesToReg /\%50v./ 
+0

Ingo. Большое спасибо, что отсортировал вопрос – Steve

+0

Ingo Я попытался объединить YankMatchestoReg, поскольку у меня есть несколько бит, которые мне нужны. В случае необходимости я могу объединиться позже, но задаюсь вопросом, есть ли способ сделать это. Я попробовал следующее, где строка 1 имеет D в char pos 265 virtual Attempt 1 YankMatchesToReg /\%5v./x | : YankMatchesToReg /\%265v./X Результат «хр (Результат на 1 строку) 12M Попытка 2 YankMatchesToReg /\%5v./x затем YankMatchesToReg/\% 265В./ X Результат «Хр (Дисплей не показывает, но результаты на отдельных линиях) M D должен выглядеть как на отдельных линиях 1 D M – Steve

+0

Это трудно следуйте (в неформатированных комментариях), что вы хотите, но команда всегда будет добавлять новые совпадения на выделенные строки. –

Смежные вопросы