3

ファイル内の長方形の領域にテキストやスペース(またはその他)が含まれていれば、この領域を簡単に選択できます。私はビジュアルブロックモードとモーションキーでそれを行います。しかし、新しいファイル(またはテキストのないファイル)にそのような領域を作成しようとすると、できません。たとえば、この領域を自動的にスペースで埋めることによって、この領域を「拡張」する方法はありますか?それとも私は間違った方向に進んでいますか?

私がこれが欲しい理由:

vimで新しいファイルを作成し、次のようなコメントブロックを作成したいと思います。

##############################################
#                                            #
#  My comment goes here                      #
#                                            #
##############################################

Ctrl+v+を使用して既存のテキストに対してそれを実行しmotion keys、次にr#ポンドで満たされた領域を作成できます。次に、同様にスペースで内側の長方形を切り取ります。

新しいファイルでこの手法を使用するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

5

ブライアン・ラスムッセンからの(非常に良い)答えは別として、あなたが求めていることをほぼvirtualedit正確に行うために私が知っている唯一の方法は、モードを使用することです。これにより、存在しない行を編集することはできませんが、既存の行の終わりを超えて編集することはできます。したがって、現在の行を#シンボルのロードに変換するには、次のようにします。

:set virtualedit=all
v50lr#

50x5ブロックを作成するには、4つの新しい空白行を作成してから、同じことを行います。

:set virtualedit=all
4o<ESC>
<C-V>4k50lr#

(ここで、は+を<C-V>押し、はを押すことを意味します)。CtrlV<ESC>Esc

このようなコメントブロックを簡単に作成できるさまざまなファイルタイプのプラグインがあると思いますが、どれが最適かはわかりません。

次のようなことができます。

50i#<ESC>yyo#<ESC>48a<SPACE><ESC>a#<ENTER>#<SPACE><SPACE>My comment goes here<ESC>:exe<SPACE>'normal'<SPACE>(49-getpos('.')[2]).'a<SPACE>'<ENTER>a#<ENTER>#<ESC>48a<SPACE><ESC>a#<ESC>p

しかし、多分それは私がばかげているだけです!:helpあなたが興味を持っているなら(あなたの友達です)、読者がそこで何が起こっているのかを理解するための練習問題として残しておきます。

これをもう少し深刻な代替手段としてはどうでしょうか。vimrcまたはvimランタイムフォルダのpluginsディレクトリにあるファイル(Unixの場合は〜/ .vim / pluginsなど)に次のように追加します。

nmap <F4> :InsertCommentBlock<CR>
command! InsertCommentBlock call InsertCommentBlock()
function! InsertCommentBlock()
    let linelength = 50
    let linelist = []

    call add(linelist, repeat('#', linelength))
    call add(linelist, '#' . repeat(' ', linelength-2) . '#')
    let comment = input('Please enter a comment: ')
    call add(linelist, '#  ' . comment . repeat(' ', linelength - (4+len(comment))) . '#')
    call add(linelist, '#' . repeat(' ', linelength-2) . '#')
    call add(linelist, repeat('#', linelength))

    call append(line('.'), linelist)
endfunction

見る:

:help function
:help 'virtualedit'
:help command
:help nmap
:help repeat()
:help append()
:help add()
:help getpos()
:help :exe

等...

于 2010-09-08T13:23:55.043 に答える
4

新しいファイルにそのようなブロックを作成したい場合は、次のようなことを行うことができます50i#EscY5P

つまり、50回挿入#の後に現在の行をヤンクして5回挿入します。これにより、#の50x5ブロックが得られます。

もちろん、#のブロックから投稿のコメントに到達するために何をするにしても、まだやらなければなりません。

于 2010-09-08T11:57:41.203 に答える
1

受け入れられた回答は、

:set virtualedit=all

ただし、その後、すべてのモードで仮想編集を有効にします。これは、希望どおりでない場合があります。実際には、ブロック編集モードで有効にするオプションもあります。

:set virtualedit=block

これは私が私のvimrcに入れたものです

于 2016-10-25T13:50:12.227 に答える
0

そこにないテキストを選択するものはないと思いますが、簡単な解決策は、次のようなもので「シード」すること76a yy4pです...したがって、76のスペースを描画し、その行をさらに4回コピーします。

于 2010-09-08T11:58:50.783 に答える