Bash TUI에 줄 번호를 표시하는 방법은 무엇입니까?

Bash TUI에 줄 번호를 표시하는 방법은 무엇입니까?

Bash에 줄 번호 지원을 추가하려고 합니다.프로젝트나는 그것을 좋아한다(주로 재미있는 운동으로).

먼저 상태 줄을 설정하는 함수를 살펴보았습니다(창 하단에 가로로 일정한 줄이 인쇄되므로 이 함수에서 영감을 얻고 싶었기 때문입니다).

status_line() {
    # '\e7'        : Save cursor position.
    #                This is more widely supported than '\e[s'.
    # '\e[%sH'     : Move cursor to bottom of the terminal.
    # '\e[30;41m'  : Set foreground and background colors.
    # '%*s'        : Insert enough spaces to fill the screen width.
    #                This sets the background color to the whole line
    #                and fixes issues in 'screen' where '\e[K' doesn't work.
    # '\r'         : Move cursor back to column 0 (was at EOL due to above).
    # '\e[m'       : Reset text formatting.
    # '\e[%sH\e[K' : Clear line below status_line.
    # '\e8'        : Restore cursor position.
    #                This is more widely supported than '\e[u'.

    buffer_name="${file_name:-New Buffer}"
    (( modified == 1 )) && buffer_name+="*"
    counter="Ln $((file_line+1)), Col $((file_column+1))"

    printf "\e7\e[%sH%s%*s%s\e[%sH\e[K\e8"\
            "$((LINES-1))"\
            "[$buffer_name]"\
            "$((COLUMNS-${#buffer_name}-${#counter}-4))" ""\
            "[$counter]"\
            "$LINES"

}

프로젝트 코드의 일부입니다. 이제 나는 수직으로 작동하도록 뭔가를 사용 \n하고 교체 할 수 있다는 것을 알고 있습니다(줄 번호가 필요하기 때문에 분명히 더 좋습니다).H수직의), 그러나 나는 printf 구문을 잘 이해하지 못합니다(이 경우 C 함수에 대해 이야기하는 것이 아니라 쉘 스크립트에서 무엇을 사용할 것인지에 대해 이야기합니다).

여기서 수직으로 할 수 있는 방법은 없나요? (반드시 완전한 기능으로 만들 필요는 없으며 for 루프/루프를 수행하지 않고도 작동하는 몇 가지 포인터/팁 또는 구현만 있으면 됩니다.)

내가 할 수 있는 일이 몇 가지 있다는 것을 알고 있습니다.

printf '%s\n' {1..10}

그러나 파일을 열 때 표시되는 텍스트를 다시 쓰거나 쓰지 않고 수평으로 작동하게 만드는 방법을 잘 모르겠습니다. (상태 줄이 수행하는 작업과 달리 내 자신의 이해에 따르면 별도의 텍스트 개체로 작동합니다.)

답변1

함수에서 이 작업을 수행하는 대신 status_linedraw_line함수를 사용합니다. 이 함수는 현재 줄이 무엇인지 알고 있으므로 각 줄의 시작 부분에 줄 번호를 출력하도록 변경할 수 있습니다.

printf%d여기서 사용할 수 있는 표시 번호 및 크기 지정자를 포함하여 셸의 매개변수는 C의 매개변수와 매우 유사합니다 . 또한 COLUMNS적절하게 줄이거나 너비 계산에서 줄 번호를 고려해야 합니다 .

관련 정보