sv_SE.UTF-8 iTerm2의 Bash 및 VIM 문제

sv_SE.UTF-8 iTerm2의 Bash 및 VIM 문제

두 가지 특정 문제가 있습니다. sv_SE.iso8859-15에서 sv_SE.utf-8로 변환할 때 이전 파일에서 iconv -f iso-8859-15를 실행했지만 여전히 왜곡된 문자가 나타납니다. 나는 이것이 Vim 때문이라고 생각합니다. Vim에서는 더 이상 스웨덴어 åäö 문자를 입력할 수도 없기 때문입니다.

두 번째 문제는 Bash에서 새 쉘을 열거나 새 줄을 시작할 때 문자를 생성하는 두 번째 키를 누를 때까지 내가 입력한 첫 번째 스웨덴어 åäö가 표시되지 않는다는 것입니다.

따라서 키보드에서 å/를 입력하면 터미널에는 å만 표시됩니다. åäö를 입력하면 åö가 표시됩니다. 그 중 하나 뒤에 입력한 두 번째 문자는 항상 무시되고 세 번째 문자가 표시되기 시작합니다. 멀티바이트 문자에서 두 번째 바이트를 무시하거나 두 번째 바이트를 건너뛰는 것과 비슷합니다.

편집: 명확히 하기 위해 첫 번째 멀티바이트 문자를 입력한 후에 다른 항목이 바로 표시됩니다. 하지만 åååå를 네 번 입력하면 첫 번째 입력이 지연되고 Enter 키를 누른 다음 종료하면 결과는 åexit입니다. 버퍼에 마지막으로 입력한 문자의 마지막 바이트를 저장하는 것 같습니다.

다음은 관련 환경 구성입니다. 그래도 이 문제를 해결해야 한다면 알려주시기 바랍니다.

$ cat .inputrc
set show-all-if-ambiguous on
set mark-directories on
set mark-symlinked-directories on
set page-completions off
set visible-stats on
set completion-query-items 9001

set input-meta on
set output-meta on
set convert-meta off

"\e[A": history-search-backward
"\e[B": history-search-forward
"\C-w": backward-kill-word

"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char

$ locale
LANG="sv_SE.UTF-8"
LC_COLLATE="sv_SE.UTF-8"
LC_CTYPE="sv_SE.UTF-8"
LC_MESSAGES="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_ALL="sv_SE.UTF-8"

$ locale -a
sv_SE
sv_SE.ISO8859-1
sv_SE.ISO8859-15
sv_SE.UTF-8

또한 스웨덴 맥 포럼에서 제안한 대로 .inputrc에서 이것을 시도했습니다. 위의 문제에는 도움이 되지 않습니다. Terminal.app과 iTerm2.app에서 증상은 동일하지만 Terminal.app에서 "Escape non-ASCII 문자" 확인란이 선택 취소되어 있습니다.

set meta-flag on
set input-meta off
set output-meta on
set convert-meta off

윔에서.

  • 현재 언어: "sv_SE.UTF-8/sv_SE.UTF-8/sv_SE.UTF-8/C/sv_SE.UTF-8/sv_SE.UTF-8"
  • 인코딩 설정=UTF-8
  • 파일 인코딩 설정=UTF-8

저는 Mac OS Lion의 최신 업데이트와 iTerm2의 최신 베타 버전을 실행하고 있습니다. Terminal.app에도 같은 문제가 존재하는데, 제 환경 때문이 아닐까 싶습니다.

답변1

터미널 문제에 관한 한, 성숙한 유니코드를 지원하는 것으로 알려진 터미널 에뮬레이터를 사용하려고 합니다. 예를 들어 uxterm시작 시 셸 실행 파일에서 로케일 관련 환경 변수를 사용할 수 있는 경우(즉, ~/.profile유사한 셸 설정 에서 사용할 수 없는 경우) 시작 스크립트에서 도움이 될 것입니다.

이것이 도움이 될지는 모르겠지만 다음을 추가하여 Vim과 관련된 유니코드 문제를 해결했습니다 ~/.vimrc.

" Unicode options
if has("multi_byte")
    " set the display encoding
    " (default is "", or "utf-8" in the GUI)
    if &termencoding == ""
        " we're probably not using the GUI
        " note: :set won't allow &-replacement
        let &termencoding = &encoding
    endif
    " set the internal encoding
    set encoding=utf-8

    " &fileencoding (controls how characters in the internal encoding will
    " be written to the file) will be set according to &fileencodings
    " (default: "ucs-bom", "ucs-bom,utf-8,default,latin1" when 'encoding'
    "  is set to a Unicode value)
endif " has("multi_byte")

답변2

UTF-8 기반이 아닌 로케일에서 UTF-8 기반 로케일로 로케일을 변경하려면 환경 설정 이상의 작업이 필요합니다. 사용된 애플리케이션이 다음과 같아야 합니다.세워짐그리고와이드 문자지원하다. 설명하신 증상은 그러한 지원이 부족함을 나타냅니다. 이는 다음과 같은 라이브러리의 문제일 수 있습니다.slang또는ncurses예를 들어.

OSX용 "UTF-8 마이그레이션 가이드"와 같은 것을 찾아보세요. 방법을 안내해 줄 것입니다.일부 패키지를 와이드 문자를 지원하는 버전으로 교체. 터미널 응용 프로그램과 같이 현재 사용하고 있는 일부 응용 프로그램에는 이 기능을 지원하는 옵션이 없는 경우가 있을 수 있습니다. 그러나 UTF가 점점 더 널리 사용되기 때문에 그럴 가능성은 없습니다.

관련 정보