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

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

2つの特定の問題があります。 sv_SE.iso8859-15からsv_SE.utf-8に変換すると、以前のファイルでiconv -f iso-8859-15を実行しましたが、まだ歪んだ文字が表示されます。私はこれがVimのためだと思います。 Vimはもはやスウェーデン語のåäö文字を入力することはできないからです。

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

したがって、キーボードで å/ を入力すると、端末に å のみが表示されます。 åäöと入力すると、åöが表示されます。そのうちの1つの後に入力した2番目の文字は常に無視され、3番目の文字が表示され始めます。マルチバイト文字で2番目のバイトを無視するか、2番目のバイトをスキップするのと似ています。

編集:明確にするために、最初のマルチバイト文字を入力した後、他の項目がすぐに表示されます。しかし、ååååを4回入力すると最初の入力が遅れ、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

また、スウェーデンのMacフォーラムで提案されているように.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

端末の問題に関しては、成熟したUnicodeをサポートすることが知られている端末エミュレータを使用しようとしています。たとえば、uxterm起動時にシェル実行可能ファイルでロケール固有の環境変数を使用できる場合(つまり、~/.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")

答え2

UTF-8 ベースではなくロケールから UTF-8 ベースのロケールにロケールを変更するには、環境設定以上の作業が必要です。使用されるアプリケーションは次のようになります。立てられるそしてワイド文字サポートする。説明されている症状は、そのようなサポートが不足していることを示しています。これは、次のライブラリの問題かもしれません。slangまたはncurses例えば。

OSX用「UTF-8移行ガイド」のようなものを見つけてください。方法をご案内いたします。一部のパッケージをワイド文字をサポートするバージョンに置き換える。端末アプリケーションなど、現在使用している一部のアプリケーションには、この機能をサポートするオプションがない場合があります。しかし、UTFがますます広く使用されているので、その可能性はありません。

関連情報