Dalam file yang sangat panjang dengan kode indentasi (akurat-), mungkin berguna untuk memindahkan langsung ke baris teks di atas atau di bawah kursor yang membatasi indentasi.
(Salah satu cara melakukan ini bisa melalui metode indent, dengan melipat level indent saat ini, yang memecah garis yang membatasi level indent menjadi hanya satu j
atau k
jauh dari kursor. Namun, saya telah menemukan contoh di mana indent lipat belum bisa mengerjakan indent yang saya tertarik.)
Berikut ini sebuah contoh, dengan kursor ditandai dengan garis bawah _
(pada kolom karakter kedua di antara definisi class Bazz
dan class Qux
), tetapi bayangkan bahwa jumlah paragraf atau garis dalam huruf module
s tidak diketahui atau variabel:
module Foo
# lots of code...
end
module Bar
class Baz
# ...
end
class Bazz
# lots of code...
end
_
class Qux
# ...
end
class Quux
# lots of code...
end
end
... bagaimana bisa aku cepat menavigasi ke o
dari module Bar
atas kursor, atau n
dari end
bawah kursor pada baris yang terakhir? Perhatikan bahwa kolom vertikal berisi spasi putih, tetapi juga tidak ada karakter di kolom kedua di antara class
definisi.
sumber
Jawaban:
Bagaimana dengan fungsi ini?
Anda bisa
nnoremap gU :call FloatUp()<CR>
(gU
untuk "naik"), dan kemudian memohongU
.Berikut penjelasannya:
norm k
) selamawhile
kondisi tersebut berlaku.while
kondisi berlaku jika ini bukan baris pertama (line(".") > 1
) dan baikgetline(".")
) pada kolom saat ini ([col(".") - 1]
) adalah spasi putih (=~ '\s'
; yaitu, cocok dengan pola spasi putih).sumber
FloatDown
fungsi juga. Ke dalam .vimrc saya, terima kasih! github.com/alxndr/dotfiles/commit/0e25a302Saya suka menggunakan pencarian untuk hal-hal ini, karena regex Vim memiliki jumlah hal yang dapat Anda cari, seperti nomor kolom virtual tertentu, dalam hal ini:
nnoremap cd /\%<C-R>=virtcol(".")<CR>v\S<CR>
nnoremap cu ?\%<C-R>=virtcol(".")<CR>v\S<CR>
Gunakan
cd
untuk turun dancu
naik. Saya sedang berpikir "kolom atas" dan "kolom bawah" di sini. Saya hampir 100% yakin bahwa ini adalah no-ops secara default. Atau pilih pemetaan Anda sendiri.Ini akan berfungsi baik jika Anda menggunakan tab atau spasi atau keduanya.
sumber
=
mendaftar adalah ekspresi mendaftar yang mengevaluasi ekspresi di tempat. Ini sangat berguna, jika tidak terlihat aneh.:let searchbak=@/<CR>
dan menambahkan:let @/=searchbak<CR>
. Tetapi pada titik ini menjadi agak panjang dan tidak dapat didekati dan mungkin hanya menjadi sebuah fungsi.Anda dapat menggunakan plugin JumpToVerticalOccurrence (default dipetakan ke ]|dan [|). Ada beberapa yang lain ]V{char}yang berfungsi seperti itu f, tetapi secara vertikal. Anda tentu saja dapat memetakannya kembali seperti yang diminta.
Jika Anda tidak ingin menggunakan plugin, Anda dapat mencoba menggunakan
:search
denganvirtcol(.)
, misalnya:dimana:
virtcol('.')
memberi Anda kolom saat ini,\S
singkatan dari non-whitespacebW
adalah untuk pencarian mundurPeriksa
:help search
untuk mempelajari lebih lanjut.Untuk membuatnya lebih mudah digunakan, Anda dapat memetakannya, misalnya:
Atau, jika kode Anda berisi tanda kurung, gunakan %untuk melompat antara pencocokan mereka (misalnya
{
,}
,[
,]
, dll) atau menggunakan seluruh ayat melompat ( {, }dengan Shiftjika perlu).Tautan / sumber:
sumber
:h search()
:w
saranawrap around the end of the file
danW
saranadon't wrap around the end of the file
. Tapi mengapa Anda menempatkan mereka pada yang kedua:map
?w
seharusnya tidak ada di sana, jadi saya sudah menghapusnya, terima kasih. Mungkin saya bingung dengan makna tombol gerak.Saya menggunakan versi modifikasi dari vim-indent-object plugin untuk memberikan perilaku ini. Modifikasi saya dapat dilihat di sini .
Ini memungkinkan saya memetakan
[i
untuk pergi ke awal level indentasi saat ini dan]i
menuju akhir.sumber
Ini bukan apa yang Anda minta karena itu bukan gerakan vertikal, tetapi sesuatu yang mirip, cepat, dan mungkin cukup baik untuk Anda bergerak mundur 2 paragraf: {{. Ini akan membawa Anda ke garis tepat sebelumnya
module Bar
.sumber
module
garis level atasnya . (Secara khusus, situasi ini muncul ketika saya baru-baru ini menavigasi kode pihak ketiga beberapa ribu baris, dengan lekukan yang akurat tetapi tidak ada baris kosong, dan mencoba untuk menemukan konteks luar dari definisi modul.)jeetsukumaran / vim-indentwise bekerja dengan baik untuk gerakan relatif, absolut, atau blok-lingkup di seluruh blok indentasi.
sumber
Saya menggunakan plugin saya sendiri move_until_char_changes.vim untuk itu.
Saya memetakannya ke
gK
dangJ
.Ini akan melompati banyak baris dengan karakter yang sama di kolom saat ini (bukan hanya spasi), yang dapat berguna dalam logfiles atau SQL dumps dengan string berulang.
Secara default, pertama-tama bergerak satu baris, sebelum mengambil karakter "pencarian".
Ini berfungsi dalam mode Visual asalkan Anda tidak mencoba menggunakannya dua kali, dan Anda tidak berada dalam mode Visual yang berbaris atau blockwise ... (selamat datang perbaikan!)
sumber
Karena saya tidak melihatnya di sini sebagai jawaban ( edit hanya memperhatikan bahwa superjer menyebutkan sesuatu yang sangat mirip). Anda bisa dengan sederhana menggunakan / atau? pencarian.
Misalnya, Anda bisa mencari karakter non whitespace ke bawah di kolom ke-2 seperti ini:
Rinciannya adalah:
Kemudian Anda dapat menggunakan operator normal untuk mengulang pencarian.
Untuk info lebih lanjut tentang subjek, lihat
:help \%c
dan:help \%v
.sumber