なぜこれが起こるのか、何を検索するのか理解できないようです。
2つのビデオで問題を示しています。
- https://www.loom.com/share/7497428d757e45399faa5ebcf391e1be
- https://www.loom.com/share/456944568b3b4eb4ac563cd6c4a6fc03
デフォルトでは、編集中に削除またはバックスペースを押すと、次のような横vi
説説が発生します。
^@?^D?@I_?^@S܅^@^@^@^@ M-?pK_?pK_?^P^@^@^@
^@^@^@?7C^@^@2C^@?,C^@?,C^@?,C^@@7C^@^A^\^@^P^F^@^@^@@I_?^@S܅^@r???^V^X?^@^@^@^@?c-?^@^@^@^@^F^@^@^@` Z?@I_?@I_?^T62?^@^@^@^@$?%?^H???^@^@^@^@^@^@^@^@^@^@^@^@%^B^@^@^@^@^@
^@^@^@^P'^@^@d^@^@^@^C^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^P???^P???^@^@^@^@??^N?L<Y?^A^@^@^@^C^@^@^@^A^A^@^@^@^@^@^@^Y^@^@^@^@^@^
# uname -a
Linux openmiko 3.10.14 #1 PREEMPT Sun Nov 1 02:58:54 UTC 2020 mips GNU/Linux
# env
SSH_CLIENT=192.168.0.133 65524 22
USER=root
SHLVL=1
HOME=/root
SSH_TTY=/dev/pts/0
PAGER=/bin/more
PS1=#
LOGNAME=root
TERM=xterm-256color
PATH=/bin:/sbin:/usr/bin:/usr/sbin
SHELL=/bin/sh
PWD=/root
SSH_CONNECTION=192.168.0.133 65524 192.168.0.174 22
EDITOR=/bin/vi
私はwcharサポートを無効にしたのでこれだと思いましたが、そうではありませんでした。
新しいファイルでこれを再現できないようです。ただし、既存のファイルを編集すると問題が発生しているようです。それはすべてzramシステムにあります。
テストに使用するものはvi
busyboxにコンパイルされます。
# vi -h
BusyBox v1.24.1
viで新しいファイルを作成して貼り付けるとうまくいくようです。使ってみると正確に書かれていますね。ところで再編集をしてみると、腐敗した部分が見つかりました。
答え1
確かに言うことはできませんが、「あなたの具体的なケースではX「特にあなたの環境を正確に再現できないことを考えると、あなたの問題に関する情報に基づいて検索するように案内できると思います。 」適切な知識人間は自分の環境を再現できなければ多くのことを見つけることができないので、ツールの使用に影響を及ぼす可能性のあるさまざまな要素について議論して問題を自分で見つけることができるように努力します。
予備の考慮事項
いくつかの詳細は重要ではないように見えるかもしれませんが、経験するものに影響を与える可能性があります。
1. Busyboxはvi
電子ではありません。vi
1つの名前が数十(または数百)の異なるものを表す可能性があるため、話すのはvi
難しいです。 Bill Joyがメンテナンスを中断したとき、多くの人が別々に作業してメンテナンスを始めたため、いくつかのvi
場所がありました。明らかに、ある人には効果があることが、他の人には効果がないかもしれません。
そしてある時点から、vi
エルビス・プレスリーのように「クローン」が現れ始めました。レプリケーションとはまったく異なるコードベースを意味します。したがって、私は個人的にこの用語を使用して、元のコードベースとGunnar Ritterの将来の更新の一部をvi
表します。vi
しかし、人々ごとにこの用語を異なる意味で使用できるので、明確にすることが重要です。
上からeditors/vi.c
Busyboxソースコードのファイル:
/*
* tiny vi.c: A small 'vi' clone
* Copyright (C) 2000, 2001 Sterling Huxley <[email protected]>
これは、あなたが実行していることが実際に私が呼ぶものではなく、vi
「小さなvi
レプリカ」であることを意味します。これは間違いなくあなたの経験に影響を与えます。さらに、BusyBoxがミニマリストシステム用に設計されていることを考慮すると、そのvi
レプリカは多くの端末変更を処理する能力が最も低い可能性があります。
2. 一連の端末サポート要件があります。
TERM=xterm-256color
私は問題になるかもしれないかもしれませんが、colors()を使ってxtermでそれを実行しています。 ex - 端末タイプオプションをサポートしているかどうかに応じて、またはにコンパイルvi
できます。 ncursesは現代的でterminfoを使用しているため、システムに端末情報がある限り機能できます。しかし、termcapは古くて古い端末情報データベースなので、もしそうなら、おそらく問題を説明します。termcap
curses
ncurses
TERMLIB
xterm
ただし、ex-を実行していないため、busybox-が提供する環境をvi
調べる必要があります。vi
busyboxリポジトリの特定のコードの概要を見ると、vi.c
端末処理がないことがわかりました。ビジボックスが他の場所で端末を処理しているようですが、詳細を調べる時間はありません。
3.vi
使用中のキーの一部がサポートされていません
ex-などのクローンを除き、vi
Del、Homeなどの制御キーはサポートされていません。したがって、これを使用しているため、これが問題の原因である可能性があります。多くの人がそれを使用したり使用してきたりして機能するため、私はサポートを考えることができますが、これはパッチバージョンを使用する場合です(Linuxディストリビューションは、ArchLinuxなどの古いパッケージにパッチを適用し、パッケージをサポートコントロールキーにパッチします。vim
vi
vi
vi
繰り返しますが、これらのキーを処理するbusyboxのコードでは何も見つからないため、vi.c
他のbusyboxがそれをサポートしているかどうかはわかりません。それでも疑わしいことは、x
たとえばDelの代わりにキー(次の文字を消去)を使用して問題が発生しているかどうかを確認することです。または、busyboxのドキュメントでこの情報を探してください。
考えられる理由
それでは、以前の考慮事項に基づいて発生する可能性のある問題について議論しましょう。以下のリストは短く、確認する必要があるより具体的で客観的な問題があります。
1. 端末エミュレーションの問題
私や他の人がコメントセクションで述べたように、busyboxがアクセスできる端末情報は、使用している端末の種類をサポートしていないか、またはそのvi
情報を持っている可能性があります。試すことができる1つの方法は、グラフィックス端末エミュレータ(オペレーティングシステムがサポートしている場合)の代わりに実際のコンソールを使用することです。また、busyboxがvi
「terminfo」サポートまたはそれをサポートするライブラリにコンパイルされている場合は、ローカルシステムから端末情報をエクスポートしてターゲットから取得できます(プラットフォームの違いがシステムにどのような影響を与えるかはわかりません)。これ)。いくつかのコメントで提案されているように、Macを実行している場合は役に立ちませんが、Linuxを実行している場合は適応することをお勧めします。このガイドラインあなたの状況に応じて。
2.プログラムは制御キーをサポートします
前述のように、busyboxは適切な端末情報をサポートしていても、これらのキーをサポートしない可能性vi
があります。または、サポートされている可能性がありますが、正しい構成が必要なため、ビジボックスのビルド構成を確認することも確認する価値があります。
この場合、適切なチャネルを介して機能要求を送信する必要があります。彼らはそれが自分の範囲と要件に合っているかどうかを評価し、実装できるかどうかを評価できます。または、可能であれば標準キーを使用してください。
3.これはバグかもしれません。
コメントで提案されているように、RAMの問題があると考える前に、バグの可能性を検討してください。一般に、ソフトウェアエラーは、ハードウェアエラーよりも発生する可能性が高くなります。原因が見つからず、おっしゃったように再現が可能な場合は、この可能性を考慮してみることができます。ドキュメントに何も見つからず、他のすべての可能性がなくなった場合は、バグレポートを送信することをお勧めします。
busyboxはvi
毎年非常に少数のコミットを受けており、何らかの理由で多くのメンテナンスを受けられない可能性があります。
4.コーディングの問題?
コメントでエンコードの問題が無視されたことを確認しました。これはやや難しいと思いますが、これを排除できると100%確信することはできません。テキストがASCIIとして表示されても(たとえばUTF-8がサポートされている場合)、LANGまたは他のロケール固有の環境変数は設定されません。これは、偶然に、ターゲットシステムが他のエンコーディングをデフォルトとして使用し、とにかく互換性がない場合はわずかな影響を与える可能性があることを意味します。私はこれが可能性が低いと思いますが、言及する価値があります。LANG=en_US.UTF-8
同様の環境変数を使用してテストを実行できます。
上記を考慮すると、このリストは完全ではありません。おそらくコメントに追加情報を追加すると、私や他の人が気づき、他の考えられる原因を追加するのに役立ちます。
ノート
vi
[a]過去に約10年を過ごした人として(vim
2012年まで転換していません)この問題を何百万回見ました。しかし、あなたの状況は異なるようです。とにかく私はこの質問に答える必要性を感じる。