Не работает цикл For внутри другого

Используйте Vim как МЕНЕДЖЕР . При некотором творческом использовании скрыть и iskeyword это можно сделать:

setlocal nowrap
setlocal conceallevel=3
setlocal concealcursor=nvic
exe "setlocal iskeyword+=\b,_"
syntax match BACKHIDE '.\b' conceal contained
syntax match BOLD '\(.\)\b\1' contains=BACKHIDE
syntax match Underlined '_\b.' contains=BACKHIDE
highlight BOLD cterm=bold

enter image description here

Поскольку Backspace и т. Д. Все еще существуют, поиск слова с помощью * будет соответствовать только таким же выделенным словам:

enter image description here

Обратите внимание, как жирный man найден, а нормальный man в текущей строке - нет.

С некоторыми дополнительными настройками (бесстыдный плагин) Vim предоставляет удобный пейджер для человека , причем лучше, чем меньше .

Чтобы заставить Vim применить соответствующие настройки, я делаю следующее:

  1. В подходящем месте для переменных среды MANPAGER = 'vim -' .
  2. В ~ / .vim / vimrc установите как минимум:

     установить несовместимый 
    плагин типа файла для синтаксиса 
    на 
     {{1 }} if! empty ($ MAN_PN) 
    autocmd StdinReadPost * set ft = man | файл $ MAN_PN 
    endif 
     

    Для команды, запущенной man с использованием MANPAGER , имя страницы руководства предоставляется в MAN_PN переменная окружения. Мы можем воспользоваться этим, чтобы определить, когда Vim используется как MANPAGER , а также для определения имени страницы руководства.

  3. В ~ / .vim / ftplugin / man.vim :

     setlocal nolist 
    setlocal buftype = nofile 
    setlocal bufhidden = hide 
    setlocal noswapfile 
     
    setlocal только для чтения {{1 }} setlocal nomodifiable 
     
    setlocal nowrap 
    setlocal hidelevel = 3 
    exe "setlocal iskeyword + = \ b, _" 
    setlocal hidealcursor = nvic { {1}} 
    nnoremap q: q!  
    nnoremap 

    Параметры создают неизменяемый временный буфер, доступный только для чтения ( см. Как создается рабочий буфер? в Vim Wikia ), отключение файлов подкачки. Затем он применяет настройки, перечисленные в начале этого сообщения, и добавляет некоторые сопоставления для удобства - q закроет текущую страницу руководства, а Пробел переместит на одну страницу вниз, как в меньше .

  4. В ~ / .vim / after / syntax / man.vim :

     совпадение синтаксиса BACKHIDE '. \ B' скрытие содержит 
    совпадение синтаксиса BOLD '\ (. \) \ b \ 1 'contains = BACKHIDE 
    соответствие синтаксиса Подчеркнутый' _ \ b. ' contains = BACKHIDE 
    выделить BOLD cterm = bold 
     

    Это синтаксис и команды выделения с начала сообщения.

Только с этими минимальными настройками:

enter image description here

Обратите внимание, как подсвечивается верхняя строка - сам Vim поставляется с некоторой подсветкой синтаксиса справочной страницы, которую вы можете увидеть, если удалили пробелы (используя col -b -x ], Например). Однако таким образом вы теряете намного больше, чем приобретаете, поскольку у Vim нет возможности узнать все, что могло быть подчеркнуто или выделено жирным шрифтом.

Мои личные настройки используют цветовую схему молокаи , номер набора , плагин авиакомпании и другое выделение для ЖИРНЫЙ :

highlight link BOLD Constant

enter image description here

И потому что я если в настройках терминала включена прозрачность (не видно на скриншоте), цвета мягче и приятнее, чем здесь.

Если вы включите номера строк (: установите номер ), как я, установите MANWIDTH на значение меньше COLUMNS , чтобы у вас не было для прокрутки в сторону, чтобы увидеть весь текст. MANWIDTH = 75 хорошо подходит для терминалов с 80 столбцами. Я использую раскрывающийся терминал шириной с экран (160–240 столбцов в зависимости от разрешения), поэтому фиксированный MANWIDTH = 80 мне подходит.

4
02.11.2016, 05:04
2 ответа

как насчет этой команды awk? попробуйте с небольшим набором файлов данных

awk '{file=FNR".txt"; print $0 > file}' *.dat
4
27.01.2020, 20:48
for LINE in {1..50}; do
    for FILE in {1..1000}; do
        sed -n "${LINE}p" "${FILE}.dat" >>"~/Escritorio/${LINE}.dat"
    done
done

В вашем скрипте вы используете одинарные кавычки для выражения sed, переменные не расширяются внутри одинарных кавычек, вам нужно использовать двойные кавычки.

Также есть один лайнер с awk, который может делать то же самое:

awk 'FNR<=50 {filename=sprintf("results/%d.dat", FNR); print >> filename; close(filename)}' *.dat

Просто создайте каталог результатов или измените его в команде на другой, ~ там не расширяется.

6
27.01.2020, 20:48

Теги

Похожие вопросы