Допустим, я хочу создать следующий текст в моем документе:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Есть ли простой способ написать "Some Msg" по вертикали, как указано выше, без необходимости вручную вставлять каждый символ в каждую строку?
insert-mode
formatting
Аллан Хасегава
источник
источник
:s/./% \0\r/
чтобы добавить%
и новые строки ... Хотя это не оченьОтветы:
Действительно хорошее решение, вероятно, потребует дополнительной работы, но «не плохо» не так сложно достичь.
идея
Все, что нам нужно, это переместить одну строку вниз после каждого символа, поэтому давайте сделаем это с помощью
InsertCharPre
авто-команды!Код
Поместите его
.vimrc
или, что еще лучше, в какой-нибудь файл вplugin/
каталоге.использование
Введите
: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 следующим образом (применяется к текущей строке):
Или гораздо проще запомнить метод - выполнить одну из следующих команд (для всех строк):
Чтобы применить только к текущей строке или нескольким строкам, предварительно добавьте, при необходимости V, увеличьте область для большего количества строк и выполните выше (но без
%
).Для PowerShell в Windows проверьте замену на сгиб .
Чтобы определить простое сопоставление клавиш (например F2), попробуйте следующее:
Затем напечатайте что-нибудь и нажмите, F2чтобы сделать текст вертикальным, таким простым.
Другой альтернативой является установка автоматической переноса слов, например
Это автоматически обернет текст настолько близко к 1 символу, насколько позволяет пробел. Недостатком является то, что за каждой буквой должен следовать пробел (так что он почти такой же, как вы бы нажималиEnter
источник
:s/\(.\)/\1\r/g
этого вы можете просто использовать:s/./\0\r/g
функционально идентичные.Я считаю, что макросы - это отличный способ делать необычные вещи, если вы заинтересованы в том, чтобы делать это не чаще одного раза в голубой луне. Допустим, у вас есть следующая таблица:
И скажем, вы хотите заменить
Some Msg
наOther Message
. Прежде всего, давайте расширим таблицу для дополнительного символа (строка перед последнимyy5p
:Макрос, который я собираюсь придумать, позаботится о преобразовании текста из горизонтального в вертикальный при замене старого текста. Начните с ввода текста в первом месте (курсор находится в конце
Other Message
):Запишите следующий макрос:
qq
: начать запись макроса с именемq
^
: перейти к началу строки3l
: перейти к столбцу, в который будет помещен текстx
: удалить старый символl
: двигаться вправо, оставив один символ из сообщения вместо старого:v
: перейти в визуальный режимf|
: прыгать, чтобы|
2h
: сдвинуть назад два символаd
: вырезать выборj
: двигаться внизP
: вставить перед курсоромq
: прекратить запись макросаНа данный момент у вас есть:
Повторите макрос достаточно много раз (т. Е. Количество символов, но вам не нужно знать его заранее. Просто недооценивайте и продолжайте, как только увидите, насколько приблизительной была ваша оценка). Итак, поехали
10@q
. Вы получаете:Хорошо, еще один (
@q
):Ваш курсор теперь на последнем
e
. Макрос плохо работает с последней буквой (вы можете попробовать@q
и затемu
(отменить) для получения неудовлетворительных результатов). Просто настройте его самостоятельно (X
для возврата).источник
qq03lxldt|i ^[jPxq@q