web-dev-qa-db-ja.com

sv_SE.UTF-8BashとVIM iniTerm2の問題

Sv_SE.iso8859-15からsv_SE.utf-8に変換するときに、古いファイルでiconv -f iso-8859-15を実行しているにもかかわらず、2つの特定の問題が発生します。そして、Vimでスウェーデン語のåäö文字を入力することすらできなくなったので、それはVimのせいだと思います。

2番目の問題は、Bashにあります。新しいシェルを開くか、新しい行を開始すると、最初に入力したスウェーデン語のåäöは、文字を生成する2番目のキーを押すまで表示されません。

したがって、キーボードでå/と入力すると、ターミナルにåのみが表示されます。 åäöと入力すると、åöなどが表示されます。これらのいずれかの後に入力した2番目の文字は常に無視され、3番目の文字から表示が開始されます。 2番目のバイトを無視したり、マルチバイト文字の2番目のバイトをスキップしたりするようなものです。

編集:明確化、最初のマルチバイト文字を入力した後、他の文字が直接表示されます。しかし、ååååを4回入力すると、最初の1つは遅延し、Enterキーを押してから、typexitが出てきます。バッファに入力した最後の文字の最後のバイトを保存するかのように。

関連する環境構成は次のとおりです。これを解決するためにさらに必要なものがある場合はお知らせください。

$ 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

また、スウェーデンのMacフォーラムからアドバイスを受けて、.inputrcでこれを試しました。上記の問題のいずれにも役立ちませんでした。 Terminal.appとiTerm2.appの両方で同じ症状が発生し、Terminal.appで[非ASCII文字をエスケープする]チェックボックスがオフになっています。

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

Vimで。

  • 現在の言語: "sv_SE.UTF-8/sv_SE.UTF-8/sv_SE.UTF-8/C/sv_SE.UTF-8/sv_SE.UTF-8"
  • エンコーディング= UTF-8を設定します
  • fileencoding = UTF-8を設定します

Mac OSLionの最新のアップデートをiTerm2の最新ベータ版で実行しています。 Terminal.appでも同じ問題が発生するため、これは私の環境が原因であると思われます。

3
Stefan Midjich

ターミナルの問題に関しては、uxtermのような成熟したUnicodeサポートがあることが知られているターミナルエミュレーターを使用してみます。ロケール関連の環境変数が起動時にシェル実行可能ファイルで使用できるようになっている場合、つまり~/.profileまたは同様のシェル起動スクリプトで設定されていない場合に役立ちます。

これがあなたに役立つかどうかはわかりませんが、Vim関連のUnicodeの問題を修正し、~/.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")
1
amphetamachine

ロケールを非ベースからUTF-8ベースに変更するには、環境設定以上のものが必要です。使用するアプリケーションは、ビルドワイド文字 をサポートしている必要があります。あなたが説明する症状は、そのようなサポートの欠如を示しています-これは、たとえばslangncursesなどのライブラリの問題である可能性があります。

OSX用の「UTF-8移行ガイド」のようなものを探してみてください。これは、ソフトウェアパッケージの一部をワイド文字対応のバージョンに置き換える方法をガイドするはずです。現在使用している一部のアプリケーション(ターミナルアプリなど)には、これをサポートするオプションがないことが判明する場合があります。しかし、UTFがますます広く使用されるようになったため、これはあまり起こりそうにありません。

0
rozcietrzewiacz