これを処理する方法はいくつかあります。マクロを作成することも、マップを作成することもできます。どちらもVIMの実行中に実行できます。どちらかを別のファイル(.vimrc
たとえば、またはこのプロジェクトに固有のバインディングを持つファイル)に配置し、必要に応じて調達することができます。
また、正規表現についてもう少しアドバイスします。特に複雑なものを書いている場合は、正規表現を(つまり)\
で始めることで、必要なsの数を大幅に減らすことができます。\v
:s/\v([0-9a-f]+\s)/0x\1/g
VIMでマクロを作成する
q通常モードで押してから、マクロに使用するキーを押すと、VIMでマクロを開始できます。@次に、を押してからマクロの文字を押すと、マクロを呼び出すことができます。q通常モードでもう一度押すと、録音が停止します。
したがって、このマクロは次のように入力できます(q
レジスターを使用)。
qq:s/\(.\+\)$/\1\r\1а\r\1ам\r\1ами\r\1ах\r\1е\r\1ном\r/
Enterq
次に、回線に接続していてこのコマンドを実行する場合は、@q通常モードから開始します。
マクロをファイルに保存してソーシングする
最後のステップでマクロを作成したとき、実際に行っていたのはq
レジスターの設定でした。registers
これは、コマンドモードで確認できます。代わりに、このマクロを.vimrc
ファイルに次のように設定できます。これにより、VIMを起動するたびに使用できるようになります。
- このマクロを保存するファイルを()に作成します
:new
。
次の行をファイルに追加します。
let @q=":s/\\(.\\+\\)$/\\1\\r\\1a\\r\\1b\\r\\1ам\\r\\1ами\\r\\1ах\\r\\1е\\r\\1ном\\r/^M"
(行をヤンクしてVIMに貼り付けると、行の終わりにCtrl+R"適切な^M
文字が表示されます。引用符の中にあることを確認するために、手動で編集する必要があります。または、次のように入力Ctrl+VCtrl+Mすることもできます。 ^ M文字を入力してください。)
- ファイルを保存します(
:w testmacro.vim
)。
- それを調達します(
:so %
または:source %
)。
- @qこれを実行したい行の1つに入力して、マクロをテストします。
後で、を実行してこのマクロをロードできるようになります:so testmacro.vim
。
マッピングを作成する
代わりに、マッピングを作成できます。次のマッピングは、指定された行の最後の単語をコピーし、それを次の6行に貼り付けてから、指定された各行に追加します。
nnoremap <c-j> yy6pAа<esc>jAам<esc>jAами<esc>jAах<esc>jAе<esc>jAном<esc>j
n
「nnoremap」の先頭にあるのは、通常モードでのみ機能することを示しています。
noremap
これは、このコマンドが再帰的な再マッピングを行わないことを意味します(ただし、を使用するとnmap
、これが発生する可能性があります)。
<c-j>
マップしCtrl+J
yy6p
て線をヤンクし、6回貼り付けます。
Aa<esc>j
現在の行の終わりに追加し、テキスト(この場合a
)を入力し、挿入モードを終了して、行を下に移動します。
このコマンドはVIMのコマンドモードで入力するか、ファイルに保存して:source
コマンドとともにロードすることができます。
レジスタとマッピングの組み合わせ
マッピング内のレジスタにアクセスできます。つまり、特定の置換正規表現を入力すると目的の結果が得られることがわかっている場合は、それをレジスタに保存してから、現在の行にコマンドを入力できます。
これを行うには、ファイルに次のコマンドを入力してから、それを入手します。
nnoremap <c-i> :<c-r>f<cr>
let @f="s/\\(.\\+\\)$/\\1\\r\\1a\\r\\1b\\r\\1ам\\r\\1ами\\r\\1ах\\r\\1е\\r\\1ном\\r/^M"
Ctrl+Iこれで、現在の行のレジスタfで置換正規表現を実行するために入ることができます。
または、目的にいくつかのレジスタを割り当てます。たとえば、afとしましょう。
nnoremap <c-l> yy6p$"apj"bpj"cpj"dpj"epj"fpj
let @a="a"
let @b="ам"
let @c="ами"
let @d="ax"
let @e="e"
let @f="ном
この場合、"貼り付けなど、レジスターを使用するコマンドを押す前に、レジスターの名前を押す機能を使用しています。