ファイルの内容はアプリケーションで構成されます。

ファイルの内容はアプリケーションで構成されます。

私はそれを弾きたいですfind -fprintf。何をしているのかわからない場合は、名前を付けたファイルに書き込むのと同じです-fprintf-printf

次のコマンドを実行すると、

find -maxdepth 1 -type d  -fprintf output "%p\b\n"

output私は(vimほとんどすべてのテキストエディタを使用して)次のようになります。

.^H
./directory-1^H
./directory-2^H
./directory-3^H

^Hバックスペース文字であることがわかります。開始:outputless

./directory-
./directory-
./directory-

したがって、質問は次のようになります。

  1. なぜvim他のテキストエディタ(試行nanoと試みemacs)は前の文字を削除して説明せずにバックスペースキーを表示しますが、lessバックスペースキーを表示するのですか?
  2. エディタが\n改行文字の代わりに文字を印刷しないのはなぜですか?
  3. バックスペースキーを印刷することとキーボードのバックスペースキーを押すことの違いは何ですか(キーボードのバックスペースキーを押すと実際に文字が削除されます)。

どこでもSSHを使用せずにマイコンピュータ(ノートブック)で実行します。 konsoleとtmuxでGNU / Linux Ubuntu 16.04 LTSを使用してください。

答え1

vimやその他のテキストエディタ(nanoとemacsを使用)でバックスペースキーを解釈せずに前の文字を削除して表示しますが、それより少ないのはなぜですか?

彼らはなぜこのようなことをするのですか? FWIW、ブラウザも同様です:-)

$ printf "<html>foo\bbar</html>" > /tmp/foo.html
$ firefox /tmp/foo.html

*foo*ミニマークダウンなど、編集者が解釈する必要がある他の種類のマークアップはありますか**bar**

バックスペースキーは、前の文字を「削除」するだけでなく、おおよその書式less設定文字としても機能することに注意してください。は太字で印刷され、x\bx下線が引かれます(一部の端末では異なる色で印刷されます)。xx\b_

printf "H\b_e\b_r\b_e\b_'s\bs Johnny!" | less

エディタが改行の代わりに\ n文字を印刷しないのはなぜですか?

彼らはこれを行うことができます。たとえば、:set listinを使用すると、改行はとして印刷viされ、$タブはとして印刷されます^I

バックスペースを印刷することとキーボードのバックスペースキーを押すことの違いは何ですか(キーボードのバックスペースキーを押すと実際に文字が削除されます)。

ハードタイプの端末(紙に印刷)でバックスペースを印刷すると、キャリッジが左に1位置移動するため、次の文字は書く、既にペーパーの内容を削除する代わりに。ガラス(CRT)とアナログ端子の位置を左に動かして文字を書くと、文字が完全に置き換えられるため、「消去」効果があります。しかし、\bそれ自体は何も削除されません。 notprintf "123\b\n"印刷されます。12312

後者は、一部の入力文字を編集/制御コマンドとして解釈するttyドライバの機能です(全リストはerase、、、、-参照、またはマニュアルページを参照)。weraseintrkillstty(1)termios(3)

バックスペースキーも機能しますいいえ常に\b/ ^H(BS) 文字を生成します。ほとんどの場合\x7f/ ^?(DEL)です。

ただし、必要な値に設定できます。

$ stty erase '#'

今すぐクリックすると、#unix v7と同様に古い文字が削除されます。

答え2

ファイルの内容はアプリケーションで構成されます。

Unixデザインの特徴の1つは、ファイルが区別されていないバイトシーケンスであり、必要に応じて解釈するのはアプリケーションに依存することです。アプリケーションはファイルの内容を別々に解釈でき、解釈し、そうすると結果が発生します。

VIM は、Single Unix 仕様の概念に従ってファイルの内容を解釈します。テキストファイルは、文字で終わり、文字を含まないゼロ行以上のファイルです。印刷できない文字をさまざまな印刷可能な表現に変換しますが、概念の一部であるため、常に行末です。

他のユーティリティはファイルの内容を異なる方法で解釈します。あるシリーズは、ファイルの内容をTeletype Model 37(TTY-37)出力データストリームとして解釈します。このシリーズにはless、、、、、、、非基本モードなど、いくつかのmore伝統的なUnixおよびGNUプログラムが含まれています。この解釈では、キャラクターは(概念的)プリントヘッドを1つの位置の後ろに移動し、mostulcolcrtncalgrotty吹く以前は何がありましたか?これらのプログラムは、紙にインクを使用した物理的なTTY-37ではないため、再入力が何を意味するのかについての独自のアイデアをソフトウェアに実装します。重複した印刷により、太字と下線のプロパティを使用したり、ある文字を別の文字に完全に置き換えたり、文字を結合したり、文字をまったく置き換えたりしないようにすることができます。

追加読書

関連情報