回答:
本当に良い解決策はおそらくもう少しの作業を必要としますが、「悪くない」を達成するのはそれほど難しくありません。
必要なのは、各文字の後に1行下に移動することだけです。そのため、InsertCharPre
自動コマンドでそれを実行しましょう。
ディレクトリの.vimrc
下のいくつかのファイルに入れてくださいplugin/
。
" enters insert mode to write vertically
function! VertStart()
augroup Vert
autocmd!
" handles each entered character and moves cursor down
autocmd InsertCharPre * call feedkeys("\<left>\<down>", 'n')
autocmd InsertLeave * call VertEnd()
augroup END
inoremap <BS> <Up><Del>
startinsert
endfunction
" cleans up on leaving insert mode
function! VertEnd()
iunmap <BS>
augroup Vert
autocmd!
augroup END
endfunction
" command to start writing vertically
command! Vert call VertStart()
:Vert
コマンドを入力して、垂直方向に書き込みを開始します。挿入モードを終了すると、この「モード」は自動的に無効になります。もちろん、このコマンドを頻繁に使用する必要がある場合は、ショートカットにマップできます。
InsertLeave
ないイベントに関して少し奇妙な方法で実装された結果です。したがって、キーを使用するには注意が必要です)。<C-C>
。
InsertLeave
ます。このキーに対してなぜトリガーされないのか疑問に思っています。
<C-C>
挿入モードを終了する良い方法として、拒否の傾向を促進するつもりだと思います。あなたがそれを言及した方法は、それが時々良い方法であることを意味するかもしれません。「警告:コンピューターのプラグを抜いてMicrosoft Wordを閉じると、ドキュメントは保存されません」というようなものです。
<C-C>
問題の理由であることに関するメモを追加しました。略語展開を抑制する挿入モードを終了する別の方法を私は知りません。もし<C-C>
なければ、少なくとものようなマッピングの一部として有用ですinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
。
<C-C>
略語を展開せずに挿入モードを終了すると説明する場所を見つけましたが、InsertLeave
イベントがトリガーされない方法については言及していません。私はそれを行うための組み込みの方法があるかどうか今興味がありますが、今のところあなたのマッピングは素晴らしいアイデアです。
通常どおり入力し、次のようにVimの置換を使用して現在の水平テキストを垂直に変換できます(現在の行に適用されます)。
:s/\(.\)/\1\r/g
または、覚えやすい方法は、次のコマンドのいずれかを実行することです(すべての行に対して):
:%!fold -w1
:%!grep -o .
現在の行またはそれ以上の行にのみ適用するには、を前に付けてV、必要に応じてより多くの行の領域を拡張し、上記を実行します(ただし、なし%
)。
Windows上のPowerShellの場合、foldの置換を確認してください。
単純なキーマッピング(例:)を定義するにF2は、次を試してください。
:nnoremap <F2> V:!fold -w1<CR>
次に、何かを入力してを押すF2と、テキストが縦になります。
他の方法は、自動ワードラッピングを設定することです、例えば
:set tw=1 " textwidth
:set formatoptions+=t
空白が許す限り、1文字に近いテキストを自動的に折り返します。欠点は、各文字の後にスペースが必要であるということです(したがって、押すのとほぼ同じです)Enter
:s/\(.\)/\1\r/g
使用できます:s/./\0\r/g
。
マクロは、ブルームーンで1回しか実行しないことに興味がある場合、異常なことを行うための素晴らしい方法であることがわかります。次の表があるとしましょう:
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% S |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% V
そして、あなたが交換したいとしましょうSome Msg
とOther Message
。最初に、余分な文字(最後の前の行yy5p
:
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% S |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
私が思いつくマクロは、古いテキストを置き換えながら、テキストを水平から垂直に変換する処理を行います。最初の場所にテキストを入力することから始めます(カーソルはの終わりにありますOther Message
):
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% SOther Message |
% o | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
次のマクロを記録します。
qq
:という名前のマクロの記録を開始 q
^
:行の先頭に移動3l
:テキストが配置される列に移動しますx
:古いキャラクターを削除するl
:右に移動して、古い文字の代わりにメッセージから1文字を残します。v
:ビジュアルモードに移動しますf|
:にジャンプ |
2h
:2文字戻るd
:選択範囲をカットj
: 下に移動P
:カーソルの前に貼り付けq
:マクロの記録を終了しますこの時点で、次のことができます。
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% other Message | So you can't just write your
% m |
% e | text and transform it into
% |
% M | the shape that you want
% s |
% g | Macros help here
% |
% |
% |
% |
% |
% |
% V
マクロを十分な回数繰り返します(つまり、文字数ですが、事前に知る必要はありません。過小評価して、推定がどれだけ近いかを確認したら続行します)。で行きましょう10@q
。あなたが得る:
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% t | So you can't just write your
% h |
% e | text and transform it into
% r |
% | the shape that you want
% M |
% e | Macros help here
% s |
% s |
% a |
% ge |
% |
% |
% V
OK、もう1つ(@q
):
%
% Not Important
% O ------------------------->
% | Stuff in side the table
% O |
% t | So you can't just write your
% h |
% e | text and transform it into
% r |
% | the shape that you want
% M |
% e | Macros help here
% s |
% s |
% a |
% g |
% e |
% |
% V
カーソルが最後になりましたe
。このマクロは、最後の文字ではうまく機能しません(満足な結果が得られない場合は、試して@q
からu
(元に戻す)ことができます)。自分で調整するだけです(X
バックスペース用)。
qq03lxldt|i ^[jPxq@q
:s/./% \0\r/
追加する%
...ないと改行を素晴らしい ...けれども、解決策