vi を使用して、現在の行番号を現在の行のどこかに置き換えるにはどうすればよいですか? たとえば、カーソルが 10 行目にある場合、その行のどこかに数字の 10 を置きたいと思います。
3 に答える
行番号をマージンに表示するだけでなく、物理的に挿入したいですか? もしそうなら -
:s/$/\=line(".")/
これにより、行末に追加されます。$ を ^ に置き換えて、行の先頭に追加します。
最初に: 以下は、vi や似たようなもの、または家宝プロジェクトの vi ではなく、vim を使用していることを前提としています。
以下にいくつかのオプションを示します。
まず、 を使用する場合は:s
、選択した行にカーソルを置き、次のようにします。
:s/texttoreplace/<C-R>=line(".")<CR>/
where<C-R>=
は実際にヒットすることを意味し、Ctrl等号Rを入力します。プロンプトが変わり、次のように入力できます。
line(".")
で示されているように、リターンを押します<CR>
。:s
この時点で、行番号が挿入されたコマンドに戻ります。挿入モードでも同じトリックを実行できます ( <C-R>=line(".")<CR>
)。
次に、 を使用\=
して同じ方法で正規表現に行番号を挿入できますが、これは挿入モードやその他の場所では機能しません。
最後に、これらは必要に応じて便利ですCtrl-A挿入およびコマンド ライン モードで現在の行番号を挿入するには:
:imap <silent> <C-A> <C-R>=line(".")<CR>
:cmap <C-A> <C-R>=line(".")<CR>
サイレント属性を行に追加しないcmap
でください。バックスペースするまで、入力中のコマンドへの行の出力を禁止します。
私は試した
:s/texttoreplace/<C-R>=line(".")<CR>/
しかし、これは、行ごとに異なる番号を使用するのではなく、すべての行でコマンド (1) を発行したときにいた行の番号にテキストを置き換えました。
以下は私のために働いた。
g/^/exec "s/texttoreplace/(".line(".")."/"
はg/^/exec
、正規表現に一致するすべての/^/
行 (つまり、すべての行) で指定されたコマンドを実行します。式line(".")
は、コマンドが入力されたときのスコープ内の行ではなく、作業中の行のスコープ内で評価されます。