Как сделать непрерывную вертикальную линию в vim?

Вот альтернативный способ решения проблемы. Возможно, этот способ сработает для вас. Это вызывает find только один раз, что делает его намного быстрее и эффективнее.

stackoverflow.sh

#!/bin/sh

declare -a NAME_LIST=(`cat list2`)
#declare -i LIST_SIZE=${#NAME_LIST[*]}
declare EXPRESSION="find ${PWD} "

# build up the find command
for name in ${NAME_LIST[@]}; do
    if test ${NAME_LIST[0]} = ${name}; then
        EXPRESSION+="-type f -and -name $name "
    else
        EXPRESSION+="-or -type f -and -name $name "
    fi
done

eval $EXPRESSION

В моей расширенной версии $EXPRESSIONравно:

find /Users/charlie -type f -and -name one -or -type f -and -name two -or -type f -and -name three -or -type f -and -name four -or -type f -and -name five -or -type f -and -name six -or -type f -and -name seven -or -type f -and -name eight

Конечно, ваш исходный код отлично работает для меня в bash на OSX (, который имеет ту же команду find, что и вы в linux ). Очевидно, поскольку вы также повторяете имя только файла (, а не путь ), на выходе будет список как файлов, так и путей.

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

stackoverflow.sh:

#!/bin/sh

NAMES=`cat list2`

for name in $NAMES; do
  echo $name >&2
  find $PWD -type f -name $name
done

Выполнение программы:

$ charlie on macbook in ~
❯❯ cat list2
one
two
three
four
five
six
seven
eight

$ charlie on macbook in ~
❯❯./stackoverflow.sh
one
/Users/charlie/one
two
/Users/charlie/src/web/two
three
/Users/charlie/misc/three
four
/Users/charlie/four
five
/Users/charlie/Documents/five
six
/Users/charlie/Documents/Ideas/six
seven
/Users/charlie/seven
eight
/Users/charlie/Documents/eight

$ charlie on macbook in ~
❯❯./stackoverflow.sh
/Users/charlie/one
/Users/charlie/src/web/two
/Users/charlie/misc/three
/Users/charlie/four
/Users/charlie/Documents/five
/Users/charlie/Documents/Ideas/six
/Users/charlie/seven
/Users/charlie/Documents/eight

$ charlie on macbook in ~
❯❯./stackoverflow.sh 2>stderr-output
/Users/charlie/one
/Users/charlie/src/web/two
/Users/charlie/misc/three
/Users/charlie/four
/Users/charlie/Documents/five
/Users/charlie/Documents/Ideas/six
/Users/charlie/seven
/Users/charlie/Documents/eight

$ charlie on macbook in ~
❯❯ cmp list2 stderr-output

$ charlie on macbook in ~
❯❯ echo $?
0
13
28.10.2019, 19:31
2 ответа

Если ваша версия Vim скомпилирована с поддержкой multibyteи ваша терминальная кодировка установлена ​​правильно, вы можете использовать Unicode поле -символы рисования , которые включают горизонтальные и вертикальные линии, а также несколько разновидностей перекрестков и блоков. Vim определяет некоторые орграфы по умолчанию для этих символов, например vvдля (, чтобы ввести орграф, вы используете Ctrl-K ; таким образом, в режиме вставки ^Kvvбудет вставлен символ в позицию курсора ). Чтобы получить полный список, если ваша версия Vim поддерживает его, введите :digraphs; для получения дополнительной информации об этой функции и для поиска по имени символа Unicode,тип :help digraphs.

Однако, в зависимости от настроек вашего терминала и выбора шрифта, не все символы рисования блока -могут отображаться как соединенные линии, поэтому ваш пробег может отличаться. Например, на моем компьютере вертикальные линии отображаются как соединенные в терминале (с использованием Source Code Pro ), но как прерывистые линии в GVim (с использованием DejaVu Sans Mono):

Box-drawing characters rendering as solid lines in the terminalBox-drawing characters rendered as broken lines in GVim

28
27.01.2020, 19:52

Для полноты относительно предыдущего ответа:

  • ^kvvприводит к │
  • ^kdrприводит к ┌
  • ^khhприводит к ─
  • ^kdlведет к ┐
  • ^kurприводит к À
  • ^kulведет к ┘

Обратите внимание, что вы можете использовать верхний регистр для более толстой линии.:

  • ^kVVравно ┃
  • ^kDRэто ┏
  • ^kHHэто ━
  • ^kLDэто ┓ (LD, а не DL, почему-то)
  • ^kURравно ┗
  • ^kULравно ┛

Существуют также версии с одним верхним и одним нижним регистром.

3
13.04.2020, 19:48

Теги

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