0

だから私はvim/vi/exについて学んでいて、バッファシステムについてかなりよく理解していると思っていました。(生成目的のバッファーがあり、バッファーに名前を付けることもできます)。ヤンク、変更、または削除を使用するたびに、汎用バッファの内容が上書きされることを知っています。

ただし、vi/ex コマンドを使用してバッファーの最後の 2 行を削除するタスクが与えられ、困惑しています。一般的に、フォーラムやインターネットを検索しても答えが見つからないようです。そのため、ここでインターウェブの達人に助けを求めようと思いました。

バッファの内容を直接変更する方法はありますか、それとも単にバッファを貼り付け、最後の 2 行を削除してからもう一度ヤンクするだけですか?

どんな助けでも大歓迎です。

編集: この質問を編集して、次の質問を含めたいと思います: バッファとレジスタの違いは何ですか?

私は当初、それらは本質的に同じものだと思っていましたが、その後、そうではないことを学びました.

私の新しい理解は、以前にバッファーと呼んでいたものは実際にはレジスターであるということであり、コンピューターに関する私の知識によれば、これはより理にかなっています。

ここで、バッファーは、変更中のテキストの現在のコピーにすぎないと思います。より具体的には、データを操作しているメイン メモリの領域です。(したがって、私の質問に対する答えは、実際には :$-1,$d になります)

しかし、これらのフォーラムで、「レジスタ」を「バッファ」と呼んで反対のことを言っている矛盾する情報に出くわしました。

誰かがそれをクリアできたら、私は本当に感謝しています.

編集: vim ヘルプは必要なすべての回答を得ましたが、投稿を削除することはできません。このサイトと他の多くのサイトの両方で、高く評価されている質問に対する多くの回答がありますが、レジスタをバッファとして誤って参照していることに注意してください。

4

3 に答える 3

3

私は長い答えを書き始めましたが、最終的にはそれを破棄して、あなたにふさわしい答えを与えることにしました:

:help buffers
:help registers
于 2014-03-31T22:50:31.770 に答える
0

まず第一に、あなたの質問を読んだ後、あなたが「バッファ」について話していたのは実際には「レジスタ」であると確信しています。バッファとレジスタの違いについては、vim のヘルプを参照してください。(実際には、2つのことはまったく異なる概念です)

ヤンク、変更、または削除を使用するたびに、汎用バッファの内容が上書きされることを知っています。

これは正しくありません。registerappendを使用すれば、コンテンツを登録することができますA-Z

バッファ(レジスタ)の内容を直接変更する方法はありますか...最後の2行を削除してから、もう一度ヤンクしますか?

はい、方法はあります。によって、レジスタの内容にアクセスして変更できます@x。で簡単に内容を変更できますlet @a='newValue'

あなたの例では、最後の2行を削除したい場合:

:let @a=join(split(@a,'\n')[0:-3],"\n")."\n"

"ap次に、変更した内容を register から貼り付けることができますa

組み込み関数がsetreg()あり、レジスタの値も変更できます。使用する場合は、ヘルプ ドキュメントを確認してください。

于 2014-03-31T20:46:07.907 に答える
0

バッファを貼り付け、最後の 2 行を削除してからもう一度ヤンクする方法は?

''その秘密は、と`]マークを使用することです。

p`]dky''

詳細については、次を参照してください。

:h ''
:h `[
于 2014-03-31T21:11:20.967 に答える