Saya menggunakan plugin vim-multiple-cursors .
Saya ingin menempatkan kursor tepat di tempat yang saya inginkan. Misalnya ( [x]
adalah posisi kursor):
Lorem ipsum dolor sit amet[1], consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna[2]
aliqua.
Dalam Teks Sublim saya biasanya akan meletakkan kursor pertama, kemudian pergi ke posisi berikutnya dengan tombol panah dan meletakkan yang kedua.
Apakah ada yang serupa di VIM? Dengan plugin ini atau yang lain.
EDIT
Setelah komentar, minat saya untuk melakukannya muncul ketika mencoba menulis
\section[My first section in this book]{My first section in this book}
dalam .tex
file. Reaksi pertama saya adalah menulis \section[]{}
dan kemudian meletakkan dua kursor untuk menulis hal yang sama di dalam []
dan {}
.
Contoh lain adalah menambahkan _someStuff
setelah beberapa nama variabel berbeda. Misalnya, ubah ini:
variable1 = 2
my_variable2 = 12
var3 = 14
dalam hal ini:
variable1_someStuff = 2
my_variable2_someStuff = 12
var3_someStuff = 14
Dengan banyak kursor, saya dapat melakukannya dengan memilih kursor kolom dan kemudian pergi ke akhir kata, lalu memasukkan, dll. Tapi saya rasa saya akan mudah untuk memilih di mana saya ingin kursor berada.
sumber
Jawaban:
Menggunakan banyak kursor bukanlah hal Vimmer
Seperti yang saya katakan di komentar menggunakan multi kursor (bahkan dengan plugin) tidak benar-benar "mengikuti cara Vim", saya benar-benar mengerti bahwa itu menarik bagi seseorang yang datang dari Sublime-Text tetapi Anda sering dapat menemukan alternatif yang setidaknya seefisien dengan fitur bawaan Vim.
Tentu saja, menemukan solusi alternatif ini tidak selalu mudah dan kadang-kadang membutuhkan waktu tetapi akan lebih mudah dengan pengalaman Vim Anda dan Anda akan melihat bahwa seiring waktu beberapa kursor akan tampak sama sekali tidak berguna bagi Anda.
Itu keren tapi bagaimana saya bisa menemukan cara alternatif?
Tidak ada jawaban universal karena sangat tergantung pada apa yang Anda coba lakukan, saya hanya akan mencoba memberikan beberapa petunjuk tentang hal-hal pertama yang harus dicoba:
Perintah titik
.
Perintah Dot mungkin salah satu alat paling kuat di Vim, itu hanya memungkinkan kita untuk mengulangi perubahan terakhir. Saya tidak bisa menjelaskannya lebih baik daripada Drew Neil dalam bukunya Practical Vim . Saya pikir setiap Vimmer harus mempertimbangkan untuk membaca buku ini.
Kekuatan dari perintah ini adalah bahwa perubahan terakhir dapat berupa tindakan yang bekerja pada karakter, baris atau seluruh file. Misalnya, perubahan dapat dibatasi pada saat Anda memasuki mode penyisipan dan saat Anda kembali ke mode normal.
Dengan mengingat hal itu, mudah untuk melakukan apa yang ingin Anda lakukan dengan multicursor:
Pertama mari kita mengatur lingkungan kita: Mari menulis seperti yang Anda sarankan
\section[]{}
Kemudian buat perubahan berulang . Kursor sekarang aktif
}
, tekanF[
untuk kembali ke[
karakter. Kemudian masukkan mode masukkan dengani
dan ketikMy first section in this book
dan kembali ke mode normal denganESC
:\section[My first section in this book]{}
Dan inilah bagian ajaibnya: Mari kita ketik
f{
untuk meletakkan kursor pada{
karakter dan tekan.
untuk mengulangi perubahan terakhir:\section[My first section in this book]{My first section in this book}
Semua tantangan dari perintah titik adalah belajar bagaimana membuat perubahan berulang: itu akan datang dengan gim Vim tetapi dasarnya adalah memahami bagaimana membuat perubahan Anda dengan cara yang berulang.
Misalnya untuk menyisipkan titik koma di akhir baris yang Anda akan lebih suka menggunakan
A;
daripada$a;
. Mengapa?Karena
A;
menciptakan aksi atom, jadi ketika Anda akan menggunakan.
di jalur lain, di mana pun Anda berada di garis itu, Anda akan memasukkan titik koma di bagian akhir. Sedangkan saat menggunakan$a;
Anda membagi perubahan Anda menjadi dua bagian$a
dan penyisipan;
jadi jika Anda menggunakannya.
akan memasukkan titik koma di posisi kursor saat ini.Perhatikan Rumus ajaib dalam Vim adalah
n.
. Alur kerja yang sangat keren adalah:/pattern
n
untuk pergi ke tempat berikutnya untuk mengedit.
untuk mengulang suntinganmakro
Macro adalah alat lain yang sangat penting di Vim karena memungkinkan Anda untuk merekam urutan penekanan tombol dan mengulanginya seolah-olah Anda mengetiknya lagi.
Saya akan menggunakan, sebagai contoh, use case kedua Anda:
Sekali lagi yang penting adalah mempelajari cara membuat makro Anda efisien (saya akan memberikan contoh balasan setelahnya):
Letakkan kursor Anda pada kata
variable1
dan mulai merekam makro Anda denganqq
. Ini berarti "mulai merekam semua penekanan tombol masa depan saya di register bernamaq
".Mulai buat pengetikan edit Anda:
0
untuk pergi di awal barise
untuk pergi di akhir kata pertamaa
untuk menambahkan setelah kursor Anda.someStuff
untuk menambahkan teks yang diinginkan<Esc>
untuk menghentikan penyisipanj
untuk melanjutkan ke baris berikutnyaq
untuk berhenti merekam makroAnda akan mendapatkan:
@q
. Karena kami ingin menjalankannya dua kali, Anda dapat menggunakan2@q
dan Anda akan mendapatkan hasil berikut:CATATAN 1 Seperti yang mungkin telah Anda perhatikan, menggunakan
0ea
pada awal makro sangat penting. Memang, jika Anda meletakkan kursor di akhir kata pertama sebelum merekam makro dan mengeksekusinya lagi, hasilnya adalah:Sebagai kursor Anda teks akan disisipkan pada posisi kursor setelah mengubah baris (yaitu akhir baris dalam kasus ini)
CATATAN 2 Makro sangat kuat dan Anda bahkan dapat membuat makro rekursif saat Anda merasa nyaman dengannya. Di sini, makro Anda mungkin:
Final
@q
akan memanggil makro dengan sendirinya alih-alih menggunakan2@q
; Anda hanya akan menggunakan@q
dan semua pekerjaan akan dilakukan.blok visual
Ini dia trik lain yang tidak secara langsung diterapkan pada use case Anda tetapi bisa sangat berguna untuk mengedit sejumlah besar baris pada saat yang bersamaan. Mari kita ambil ekstrak kode CSS ini:
Bagaimana jika Anda memindahkan sprite dari
images
kecomponents
?Nah Anda dapat menempatkan kursor Anda pada
i
dariimages
dan tekan<C-v>
. Ini akan memulai mode blok visual yang memungkinkan untuk memilih blok. Sekarang Anda dapat mengetikt/
untuk memilih kata yang ingin Anda ubah dan2j
untuk memilih semua kemunculan kata tersebut.Setelah itu Anda cukup mengetik
c
untuk mengubah kata lalucomponents
. Saat Anda keluar dari mode penyisipan, Anda akan melihat:Perintah global
Perintah global adalah alat yang memungkinkan untuk menerapkan perintah mode ex pada garis yang cocok dengan pola, sekali lagi itu cara yang baik untuk menerapkan perubahan yang sama di tempat yang berbeda tanpa memerlukan banyak kursor.
Sintaksnya adalah sebagai berikut:
Untuk detail lebih lanjut tentang
[range]
parameter, silakan lihat:h :range
. Saya tidak akan memerinci di sini, saya hanya akan mengingatkan yang%
mewakili seluruh file,'<,'>
mewakili pilihan terakhir, dan1,5
mewakili baris 1 hingga 5 file.Parameter ini mendefinisikan garis yang akan diperlakukan oleh perintah global. Jika tidak ada rentang yang ditentukan, maka perintah global akan digunakan
%
secara default.Argumen [pola] adalah pola pencarian seperti yang biasa Anda gunakan dengan mesin pencari. Saat mengintegrasikan riwayat pencarian, Anda dapat membiarkan bidang ini kosong dan perintah global akan menggunakan pola pencarian terakhir dalam riwayat pencarian.
Akhirnya parameter [perintah] adalah perintah ex karena Anda mungkin terbiasa.
Sekarang perilaku perintah global cukup sederhana:
Karena parameter [perintah] adalah perintah ex, Anda dapat melakukan banyak hal. Mari kita ambil kode pseudo berikut yang tidak cukup menarik dan memiliki banyak pesan debug:
Sekarang katakanlah Anda yakin kode ini berfungsi dan Anda ingin menghapus
echo
pernyataan tidak berguna ini :Anda dapat menerapkan perintah global Anda pada seluruh file sehingga Anda harus menambahkan perintah dengan
%
(atau tanpa apa-apa karena%
rentang default).Anda tahu bahwa garis yang ingin Anda hapus semua cocok dengan pola
echo
Anda ingin menghapus baris-baris ini sehingga Anda harus menggunakan perintah
:delete
yang juga bisa disingkatd
Jadi, Anda cukup menggunakan fungsi berikut:
Yang juga bisa disingkat
Perhatikan bahwa
%
menghilang,global
disingkat sebagaig
dandelete
sebagaid
. Seperti yang Anda bayangkan hasilnya adalah:CATATAN 1 Poin penting yang perlu waktu untuk saya sadari adalah bahwa
normal
perintah tersebut adalah perintah ex yang artinya Anda dapat menggunakannya dengan perintah global. Itu bisa sangat kuat: katakanlah saya ingin menduplikasi semua baris yang berisi gema, saya tidak perlu makro atau bahkan formula ajaibn.
. Saya cukup menggunakanDan voila:
CATATAN 2 "Hei bagaimana jika saya ingin menggunakan perintah saya pada baris yang tidak cocok dengan pola tertentu?"
global
memiliki perintah berlawananvglobal
disingkatv
yang berfungsi persis sepertiglobal
kecuali bahwa perintah akan diterapkan pada baris yang tidak cocok dengan parameter [pola]. Cara ini jika kita terapkanPada contoh kami sebelumnya, kami mendapatkan:
The
delete
perintah telah diterapkan pada baris yang tidak mengandungecho
.Di sini saya berharap bahwa beberapa petunjuk itu akan memberi Anda ide tentang cara menyingkirkan plugin multi-kursor Anda dan menggunakan Vim dengan cara Vim ;-)
Seperti yang dapat Anda bayangkan, contoh-contoh ini sangat sederhana dan dibuat untuk menunjukkan bahwa ketika Anda mengikuti Vim, Anda jarang membutuhkan beberapa kursor. Saran saya adalah ketika Anda menghadapi situasi di mana Anda pikir itu akan berguna, tulis dan luangkan waktu kemudian untuk menemukan solusi yang lebih baik. 99% dari waktu Anda akhirnya akan menemukan cara yang lebih cepat / lebih efisien untuk melakukannya.
Juga saya akan mengulangi diri saya sekali lagi tetapi saya benar-benar mendorong Anda untuk membaca Vim Praktis oleh Drew Neil karena buku ini bukan tentang "Bagaimana melakukan ini atau ini di Vim" ini tentang "Bagaimana belajar berpikir dengan cara Vim" yang akan memungkinkan Anda untuk membangun solusi Anda sendiri untuk masalah masa depan Anda dengan cara yang baik.
Terima kasih khusus PS kepada @Alex Stragies untuk pekerjaan penyuntingannya dan koreksi yang ia buat untuk pos panjang ini.
sumber
gn
objek teks juga. Ini membahas beberapa kasus penggunaan beberapa kursor. Cari dengan/
, laludgn
ataucgn
, lalu ulangi dengan.
.gn
saya akan mencobanya dan menambahkannya setelah. Terima kasih atas kepalanya!Kasus penggunaan yang Anda berikan kepada saya terdengar ingin tahu
.
perintah kunci (ulangi perintah Pengeditan terakhir)i
, masukkan teks Anda,<ESC>
.
(Dot) ==> Teks Identik dimasukkan<ALT>-j.
Contoh tex Anda untuk saya diselesaikan oleh:
I\section[]{}<ESC>hhiMy first Sec...<ESC>lll.
sumber
.
perintah kunci, tetapi tidak pernah berpikir untuk menggunakannya dengan cara itu. Saya setuju itu cara yang bagus. Tetapi jawaban Anda sebenarnya tidak merujuk pada pertanyaan yang sebenarnya, jadi saya rasa tidak pantas menerimanya.Lebih banyak cara Vim.
Tugas pertama:
Alur kerja:
Tugas kedua:
Perintah:
Hasil:
sumber