Katakanlah saya ingin menghasilkan teks berikut dalam dokumen saya:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Apakah ada cara mudah untuk menulis "Some Msg" secara vertikal seperti di atas tanpa harus secara manual memasukkan setiap karakter di setiap baris?
insert-mode
formatting
Allan Hasegawa
sumber
sumber
:s/./% \0\r/
menambahkan%
dan baris baru ... Bukan solusi yang bagus , ...Jawaban:
Solusi yang benar-benar baik mungkin akan membutuhkan lebih banyak pekerjaan, tetapi "tidak buruk" tidak terlalu sulit untuk dicapai.
Ide
Yang kita butuhkan adalah memindahkan satu baris ke bawah setelah setiap karakter, jadi mari kita lakukan itu hanya melalui
InsertCharPre
perintah otomatis!Kode
Masukkan
.vimrc
atau lebih baik lagi ke beberapa file di bawahplugin/
direktori.Pemakaian
Masukkan
:Vert
perintah untuk mulai menulis secara vertikal. Meninggalkan mode penyisipan secara otomatis menonaktifkan "mode" ini. Tentu saja, Anda dapat memetakannya ke jalan pintas jika Anda perlu sering menggunakan perintah ini.Masalah Dikenal
InsertLeave
acara, yang tidak dipecat, sehingga menggunakan kunci mengharuskan seseorang untuk berhati-hati).sumber
<C-C>
.InsertLeave
tidak dipicu untuk kunci ini.<C-C>
sebagai cara yang baik untuk keluar dari mode Sisipkan. Cara Anda menyebutkannya bisa berarti kadang-kadang metode yang bagus. Ini seperti mengatakan "Peringatan: dokumen Anda tidak akan disimpan jika Anda menutup Microsoft Word dengan mencabut komputer Anda."<C-C>
menjadi alasan masalah ini. Saya tidak mengetahui metode lain untuk meninggalkan mode penyisipan menekan ekspansi singkatan seperti<C-C>
halnya, jika tidak ada, ini berguna setidaknya sebagai bagian dari pemetaan sepertiinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
sebagai meninggalkan mode Sisipkan tanpa memperluas singkatan, dan tidak disebutkan bagaimana itu tidak memicuInsertLeave
peristiwa. Saya sekarang ingin tahu apakah ada cara bawaan untuk melakukan itu, tetapi untuk sekarang pemetaan Anda adalah ide yang bagus.Anda dapat mengetik seperti biasa dan kemudian mengubah teks horizontal saat ini menjadi vertikal dengan menggunakan substitusi di Vim sebagai berikut (berlaku untuk baris saat ini):
Atau metode yang lebih mudah diingat adalah dengan mengeksekusi salah satu dari perintah berikut (untuk semua baris):
Untuk menerapkan hanya untuk baris saat ini atau lebih banyak baris, awali dengan V, perluas area untuk lebih banyak baris jika perlu, dan jalankan di atas (tetapi tanpa
%
).Untuk PowerShell di Windows, periksa penggantian lipatan .
Untuk menetapkan pemetaan kunci sederhana (mis. F2), Coba yang berikut ini:
Kemudian ketik sesuatu dan tekan F2untuk membuat teks vertikal, sesederhana itu.
Alternatif lain adalah mengatur pembungkus kata otomatis, mis
Itu akan secara otomatis membungkus teks sedekat 1 karakter sebagaimana ruang putih memungkinkan. Kerugiannya adalah bahwa setiap huruf perlu diikuti oleh spasi (jadi hampir sama dengan Anda akan menekanEnter
sumber
:s/\(.\)/\1\r/g
, Anda bisa menggunakan:s/./\0\r/g
yang identik secara fungsional.Saya menemukan bahwa makro adalah cara yang luar biasa untuk melakukan hal-hal yang tidak biasa jika Anda tertarik untuk melakukan itu tidak lebih dari sekali di bulan biru. Katakanlah Anda memiliki tabel berikut:
Dan katakanlah Anda ingin mengganti
Some Msg
denganOther Message
. Pertama, mari perpanjang tabel untuk karakter tambahan (baris sebelum yang terakhiryy5p
:Makro yang akan saya buat akan mengurus konversi teks dari horizontal ke vertikal sambil mengganti teks lama. Mulailah dengan mengetik teks di lokasi pertama (kursor ada di akhir
Other Message
):Rekam makro berikut:
qq
: mulai merekam makro bernamaq
^
: pergi ke awal baris3l
: pindah ke kolom tempat teks akan ditempatkanx
: hapus karakter lamal
: bergerak ke kanan, meninggalkan satu karakter dari pesan menggantikan karakter lama:v
: masuk ke mode visualf|
: lompat ke|
2h
: mundur dua karakterd
: seleksi cutj
: bergerak ke bawahP
: tempelkan sebelum kursorq
: mengakhiri rekaman makroPada titik ini Anda memiliki:
Ulangi makro cukup banyak kali (yaitu, jumlah karakter, tetapi Anda tidak perlu mengetahuinya terlebih dahulu. Cukup meremehkan, dan lanjutkan setelah Anda melihat seberapa dekat perkiraan Anda). Jadi mari kita pergi bersama
10@q
. Anda mendapatkan:Oke, satu lagi (
@q
):Kursor Anda sekarang adalah yang terakhir
e
. Makro tidak berfungsi dengan baik dengan huruf terakhir (Anda dapat mencoba@q
dan kemudianu
(membatalkan) untuk hasil yang tidak memuaskan). Cukup sesuaikan sendiri (X
untuk backspace).sumber
qq03lxldt|i ^[jPxq@q