Saya mulai menggunakan gvim, dan saya tidak mengerti bagaimana cara kerja multiline edit di gvim.
Sebagai contoh:
Teks asli:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ semuanya dipilih, lalu saya tekan I untuk melakukan multiline insert.
Tujuan saya adalah memasukkan kutipan seperti pada baris pertama, dan kemudian menekan Esc:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Apa yang terjadi? Saya mengharapkan perilaku yang mirip dengan sublimetext:
Jika Anda tidak tahu cara kerjanya, itu hanya mengulangi tindakan untuk setiap baris. Bagaimana bisa mencapainya? Dan apa yang sedang dilakukan vim di sini?
vim
sublimetext
text-editor
AlfredoVR
sumber
sumber
Jawaban:
Bantulah diri Anda sendiri dengan menjatuhkan lapisan kompatibilitas Windows.
Pintasan normal untuk memasuki mode Blok Visual adalah
<C-v>
.Yang lain sudah berurusan dengan rekaman makro, berikut adalah beberapa ide lain:
Hanya menggunakan mode blok visual .
Letakkan kursor pada kata kedua:
Tekan
<C-v>
untuk masuk ke mode blok visual dan perluas pilihan Anda ke bawah:Hit
I"<Esc>
untuk mendapatkan:Letakkan kursor pada karakter terakhir dari kata ketiga:
Tekan
<C-v>
untuk masuk ke mode blok visual dan perluas pilihan Anda ke bawah:Hit
A"<Esc>
untuk mendapatkan:Dengan mode blok visual dan Surround.vim .
Letakkan kursor pada kata kedua:
Tekan
<C-v>
untuk masuk ke mode blok visual dan perluas pilihan Anda ke arah bawah dan kanan:Hit
S"
untuk mengelilingi pilihan Anda dengan ":Dengan mode garis-visual dan
:normal
.Tekan
V
untuk memilih seluruh baris dan rentangkan ke bawah:Jalankan perintah ini:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
untuk mendapatkan::norm[al]
memungkinkan Anda untuk mengeksekusi perintah mode normal pada rentang garis ('<,'>
bagian tersebut ditambahkan secara otomatis oleh Vim dan berarti "bertindak pada area yang dipilih")^
menempatkan kursor pada karakter pertama dari barisw
pindah ke kata berikutnyai"
menyisipkan"
sebelum kursor<C-v><Esc>
adalah cara Vim untuk memasukkan karakter kontrol dalam konteks ini, di sini<Esc>
digunakan untuk keluar dari mode penyisipanee
pindah ke akhir kata berikutnyaa"
menambahkan"
setelah kursor<CR>
mengeksekusi perintahMenggunakan Surround.vim, perintah di atas menjadi
sumber
gv
untuk mendapatkan kembali pilihan visual Anda sebelumnya, dan kemudian bergerak secara horizontal, mungkin dengan2e
. (Semakin banyak baris, semakin berhargagv
!)s
dalam mode normal tetapi besarS
dalam mode visual, jadi pada langkah 3 metode surround.vim, penekanan tombol harusS"
S"
, tidaks"
.
.Itu adalah beberapa solusi out-of-the-box yang diberikan di atas, tetapi kami juga dapat mencoba beberapa plugin yang menyediakan banyak kursor seperti Sublime.
Saya pikir ini terlihat menjanjikan:
Tampaknya ditinggalkan untuk sementara waktu, tetapi memiliki beberapa kontribusi pada 2014
Ini cukup kuat, walaupun saya butuh sedikit waktu untuk membiasakan diri dengan aliran (yang cukup luhur tapi masih modal seperti Vim).
Dalam pengalaman saya jika Anda memiliki banyak plugin lain yang diinstal, Anda mungkin menemui beberapa konflik!
Ada beberapa upaya lain untuk fitur ini:
Silakan mengedit jika Anda melihat ada yang mengalami peningkatan.
sumber
Ada beberapa cara untuk mencapai itu di Vim. Saya tidak tahu mana yang paling mirip dengan Sublime Text.
Yang pertama adalah melalui mode penyisipan multiline . Letakkan kursor ke "a" kedua di baris pertama, tekan
Ctrl-V
, pilih semua baris, lalu tekanI
, dan masukkan tanda kutip ganda. Menekan<esc>
akan mengulang operasi di setiap baris.Yang kedua adalah melalui makro. Letakkan kursor pada karakter pertama, dan mulai merekam makro dengan
qa
. Ke kanan denganllll
, masukkan mode insert dengana
, letakkan doublequote, keluar dari mode insert, dan kembali ke awal baris Anda dengan<home>
(atau setara). Tekanj
untuk turun satu baris. Hentikan merekam denganq
. Dan kemudian memutar ulang makro dengan@a
. Beberapa kali.Apakah salah satu dari pendekatan di atas bekerja untuk Anda?
sumber
jika Anda menggunakan perintah "global", Anda dapat mengulangi apa yang dapat Anda lakukan pada satu online dan sejumlah baris.
contoh:
Perintah di atas menemukan semua baris yang memiliki foo, dan mengganti semua kemunculan bilah di baris itu dengan baz.
akan dilakukan di setiap baris
sumber
:g
perintah yang dijelaskan di sini. Saya suka menggunakan/gc
untuk meminta "konfirmasi" sehingga saya dapat menekany
ataun
untuk setiap penggantian, ataua
untuk mengubah semuanya.sumber
I
tidak bisa masuk ke mode insert, tahukah Anda mengapa ini terjadi?vim -u NONE
dan coba lakukan tindakan yang diinginkan lagi, itu bisa berupa peta atau plugin yang mengubah perilaku vim Anda.Saya tidak yakin apa
vim
yang dilakukan, tetapi ini adalah efek yang menarik. Cara Anda menggambarkan apa yang Anda inginkan terdengar seperti cara kerja makro (:help macro
). Sesuatu seperti ini akan melakukan apa yang Anda inginkan dengan makro (mulai dalam mode normal):qa
: Rekam makro untuka
mendaftar.0w
:0
mulai dari baris,w
lompat satu kata.i"<Esc>
: Masuk ke mode insert, masukkan a"
dan kembali ke mode normal.2e
: Lompat ke akhir kata kedua.a"<Esc>
: Tambahkan a"
.jq
Pindah ke baris berikutnya dan akhiri rekaman makro.Diambil bersama-sama:
qa0wi"<Esc>2ea"<Esc>
Sekarang Anda dapat menjalankan makro dengan
@a
, ulangi makro terakhir dengan@@
. Untuk menerapkan ke seluruh file, lakukan sesuatu seperti99@a
yang menganggap Anda tidak memiliki lebih dari 99 baris, eksekusi makro akan berakhir ketika mencapai akhir file.Inilah cara mencapai apa yang Anda inginkan
visual-block-mode
(mulai dalam mode normal):visual-block-mode
, pilih garis yang ingin Anda pengaruhi,G
untuk pergi ke bagian bawah file.I"<Esc>
."
..
kehendak yang sederhana sudah cukup.sumber
9999@a
mungkin jelek tapi jauh lebih mudah untuk mengetik daripada:%norm! @a
dan itu tidak berjalan kembali pada baris yang baru saja diedit. Tetap bagus untuk mengetahuinya. :)Solusi saya adalah menggunakan 2 pemetaan ini:
Cara menggunakannya:
V12j
<leader>n
<leader>m
Untuk mengedit lagi, Anda tidak perlu memilih lagi. Cukup tekan
<leader>n
, edit dan tekan<leader>m
untuk menerapkan.Bagaimana ini bekerja:
<Esc><Esc>0qq
Keluar dari pilihan visual, pergi ke awal baris dan mulai merekam makro.q
Berhenti merekam makro.:'<,'>-1normal!@q<CR>
Dari awal pemilihan visual ke baris sebelum akhir, mainkan makro pada setiap baris.<Down>
Kembali ke baris terakhir.Anda juga bisa memetakan kunci yang sama tetapi untuk mode yang berbeda:
Meskipun ini mengacaukan kemampuan Anda untuk mengedit lagi. Anda harus memilih kembali jalur Anda.
sumber