Bagaimana cara saya pindah ke ujung jalur di Vim?

1194

Saya tahu bagaimana cara umumnya bergerak dalam mode perintah, khususnya, melompat ke garis, dll. Tapi apa perintah untuk melompat ke ujung garis yang saya pakai saat ini?

garam
sumber
19
Perintah dasar vim tercakup dalam waktu kurang dari 10 menit youtube.com/watch?v=71YTkxUNwmg
eomeroff
14
Apa yang salah dengan menghabiskan beberapa menit melalui vimtutor? Ini adalah bagian dari instalasi Vim Anda dan menunjukkan kepada Anda dasar-dasarnya.
dash-tom-bang
@ dash-tom-bang Yah mereka mendapat skor yang cukup tinggi di sini ... :) Tapi ya Anda benar vimtutoritu hebat. Mungkin mereka tidak tahu tentang itu?
Pryftan

Jawaban:

2052

Hanya kunci $ (tanda dolar) . Anda dapat menggunakan Auntuk pindah ke akhir baris dan beralih ke mode pengeditan (Tambah). Untuk melompat karakter non-kosong terakhir, Anda dapat menekan tombol glalu _.

Kebalikan dari Aadalah I(mode Insert di awal baris), sebagai samping. Menekan hanya ^akan menempatkan kursor Anda pada karakter spasi pertama non-putih.

dvorak
sumber
81
Lompat ke terakhir non kosongg_
SergioAraujo
2
Kadang-kadang g_variasi lebih bermanfaat karena tidak menyertakan karakter kosong
rogercampos
6
Varian _g sangat berguna saat bekerja dalam mode visual, karena memungkinkan Anda untuk menggunakan baris tanpa baris baru di bagian akhir.
Greg Robbins
2
Sementara tombol Home dan End bekerja pada keyboard biasa, $ dan ^ diperlukan saat Anda menggunakan laptop :)
Sridhar Sarnobat
Anda harus menambahkan ^ ke daftar.
Tek
304

Seperti yang dikatakan banyak orang:

  • $ membawa Anda ke akhir baris

tetapi juga:

  • ^atau _membawa Anda ke karakter non-spasi pertama di baris, dan
  • 0(nol) membawa Anda ke awal baris termasuk. ruang putih
Rob Wells
sumber
Saya tahu | membawa kita ke awal baris tetapi saya tidak mengetahui 0. Jadi 0 dan | melakukan hal yang persis sama, ya?
Kamran Bigdely
8
@kami: walaupun deskripsinya berbeda, namun tampaknya berperilaku identik. Namun |perintah pipa dapat menghitung, misalnya 3 | untuk melompat ke kolom ketiga.
Paul Ruane
136
  • $ pindah ke karakter terakhir di telepon.
  • g _ pergi ke karakter non-spasi putih terakhir.

  • g $ pergi ke akhir garis layar (ketika garis penyangga dibungkus beberapa garis layar)

Paul Ruane
sumber
Saya merasa seperti sama dengan $ b
Dave Aaron Smith
3
@DaveAaronSmith: bpergi ke awal kata sebelumnya yang sama sekali bukan hal yang sama. Ini kira-kira setara dengan $ge.
Paul Ruane
9
Saya menggunakan _dan g_untuk visual / menarik, karena $juga akan menyalin / menghapus karakter baris baru (LN).
Ernest
Bagi saya, $ menuju akhir baris layar saat ini (saat dibungkus). Saya belum berhasil mencari tahu mengapa. g_adalah satu-satunya cara yang saya temukan untuk sampai ke ujung garis yang sebenarnya.
ezuk
@ezuk $pergi ke ujung garis bahkan ketika dibungkus untuk saya. Saya tahu tidak ada pengaturan untuk menyesuaikan perilakunya. Mungkin sudah dipetakan ulang oleh .vimrc Anda g$?
Paul Ruane
66

Pertanyaan utama - ujung baris

$ pergi ke akhir baris, tetap dalam mode perintah

A pergi ke akhir baris, beralih ke mode insert

Sebaliknya - mulai dari garis (secara teknis karakter non-spasi pertama )

^ pergi ke awal baris, tetap dalam mode perintah

I (huruf besar i) pergi ke awal baris, beralih ke mode insert

Selanjutnya - mulai dari garis (secara teknis kolom pertama terlepas dari spasi putih )

0 (nol) pergi ke awal baris, tetap dalam mode perintah

0i (nol diikuti dengan huruf kecil i) mulai dari garis, beralih ke mode memasukkan

Bagi mereka yang mulai belajar vi, berikut adalah pengantar vi yang baik dengan mendaftar perintah berdampingan vi untuk gerakan kursor Windows GUI Editor dan tombol pintas khas.

editor vi untuk pengguna Windows

ap-osd
sumber
3
Analog ke Itidak 0tetapi ^, karena keduanya Idan ^pergi ke karakter non-spasi pertama dari baris tetapi 0pergi ke kolom nol (seperti namanya).
wchargin
@wchargin benar, saya pikir saya tidak bisa menemukan analognya 0? (pergi ke karakter pertama (= kolom 0) dari baris dan pergi ke mode insert)
franssu
@ Transsu: Satu-satunya yang saya tahu adalah 0i. :-)
wchargin
@wchargin - Terima kasih atas kebenaran teknisnya. Saya telah memperbarui pos.
ap-osd
42

Jika baris Anda saat ini membungkus layar yang terlihat ke baris berikutnya, Anda dapat menggunakan g $ untuk sampai ke ujung garis layar .

Commodore Jaeger
sumber
3
Saya baru saja menemukan pre-pending perintah naik dan turun dengan g make vim memindahkan kursor berbasis layar, daripada berbasis garis. Yaitu gj dan gk memungkinkan Anda untuk bergerak naik dan turun pada garis panjang. Sangat bermanfaat.
Druckles
1
Juga menemukan bahwa mengetik gw dan sesuatu tampaknya berubah j dan k secara permanen untuk berperilaku seperti ini. Tidak yakin bagaimana atau mengapa. Adakah yang bisa menjelaskan ini?
Druckles
4
@Druckles: Sedikit balasan terlambat, tetapi jika Anda masih bertanya-tanya, (atau apakah ada orang lain yang membaca ini) gwdan gqmerupakan perintah yang memformat ulang teks. (lihat :h gwdan :h gq) Apa yang mungkin terjadi adalah Anda melakukan gw{motion}dan mengubah beberapa teks sehingga garis layar sesuai dengan baris yang sebenarnya.
pandubear
14

Tanda dolar: $

David Singer
sumber
13

Dalam banyak kasus, ketika kita berada di dalam string kita tertutupi oleh tanda kutip ganda, atau saat menulis pernyataan kita tidak ingin menekan escape dan pergi ke akhir baris itu dengan tombol panah dan tekan tanda titik koma ( ;) hanya untuk mengakhiri garis. Tulis baris berikut di dalam file vimrc Anda :

imap <C-l> <Esc>$a

Apa kata garis? Ini memetakan Ctrl + l ke serangkaian perintah. Ini sama dengan Anda menekan Esc(mode perintah), $(ujung jalur), a(tambahkan) sekaligus.

Pramod
sumber
terima kasih untuk yang itu. Saya telah ingin menambahkan Ctrl-e kembali ke vim saya sebagai pergi ke akhir baris seperti pada mesin pertama saya dan tidak tahu bagaimana
tristanbailey
1
Seperti kata jawaban yang diterima, Anda dapat menekan A untuk melakukan hal yang sama.
trysis
4
@tis Anda salah paham, ini tidak beralih dari mode pengeditan yang cukup bagus.
Marconi
2
Kamu benar. vimtentu saja memungkinkan Anda untuk melakukan lebih banyak dalam waktu lebih sedikit dengan hal-hal seperti ini. @razorxpress, penyesuaian kecil akan imap <C-l> <Esc>A, yang membuat Ctrl + l setara dengan menekan Esc(keluar dari mode insert), kemudian A(tambahkan ke akhir baris).
trysis
3
Saya pikir cara yang lebih idiomatis untuk memetakan ini adalahinoremap <C-l> <C-o>A
bennyty
12

Keuntungan dari tombol 'End' adalah berfungsi baik dalam mode normal dan menyisipkan.

'$' hanya berfungsi dalam mode normal / perintah tetapi juga berfungsi di editor vi klasik (baik untuk mengetahui kapan vim tidak tersedia).

Diastrofisme
sumber
38
Untuk apa Anda memasukkan mode insert ?! Tidak ada warga negara biasa yang pergi ke sana setelah siang hari. Anda tahu apa yang terjadi di sana, bukan? Kode lenyap di sana, kau tahu? Itu menghilang, dan tidak pernah terdengar lagi.
Benteng
3
Terima kasih untuk ini, karena saya ingin tetap dalam Mode Sisipkan setelah saya memasukinya. Sayangnya laptop saya tidak memiliki tombol Putus. :(
ray
12

Perhatikan juga perbedaan antara garis (atau mungkin garis fisik) dan garis layar . Baris diakhiri oleh karakter End Of Line ("\ n"). Baris layar adalah apa pun yang terjadi untuk ditampilkan sebagai satu baris karakter di terminal Anda atau di layar Anda. Keduanya terpisah jika Anda memiliki garis fisik lebih panjang dari lebar layar, yang sangat umum saat menulis email dan semacamnya.

Perbedaannya juga muncul di perintah end-of-line.

  • $dan 0pindah ke akhir atau awal garis fisik atau paragraf, masing-masing:
  • g$dan g0pindah ke akhir atau awal garis layar atau paragraf.

Jika Anda selalu lebih suka perilaku yang terakhir, Anda dapat memetakan kembali kunci seperti ini:

:noremap 0 g0
:noremap $ g$
loevborg
sumber
1
Bagaimana cara menuju non-spasi putih terakhir dari baris? (Apakah itu garis layar atau garis fisik)
Kamran Bigdely
g_adalah non-spasi putih terakhir dari garis fisik . Bagaimana dengan garis layar?
trysis
10

Tekan Auntuk masuk ke mode edit mulai dari akhir baris.

Brian
sumber
9

Atau ada jawaban yang jelas: gunakan Endkunci untuk pergi ke akhir baris.

davr
sumber
1
Ya, terminal mac adalah salah satu yang saya perhatikan membajak kunci dan tidak meneruskannya ke hal-hal yang berjalan di dalam terminal. Salah satu hal yang mengganggu saya setiap kali saya menggunakan mac sedikit.
davr
Inti dari menggunakan vim adalah tidak harus menggunakan kunci seperti 'Akhir'. Jangan pernah meninggalkan barisan rumah.
Jon Thoroddsen
7
Di Mac tidak ada tombol Akhiri.
kenorb
1
@kenorb Ada ketika saya memposting komentar ... tapi Apple suka menghapus fitur selama bertahun-tahun. netdna.webdesignerdepot.com/uploads/2009/01/... ini sebenarnya adalah salah satu keyboard favorit saya sepanjang masa
davr
9

Saya tidak dapat melihat hotkey untuk macbook untuk menggunakan vim di terminal standar. Semoga ini bisa membantu seseorang. Untuk pengguna macOS (diuji pada macbook pro 2018):

fn+ - pindah ke garis awal

fn+ - pindah ke garis akhir

fn+ - pindah halaman ke atas

fn+ - pindahkan halaman ke bawah

fn+ g - pindahkan kursor ke awal dokumen

fn+ shift + g - pindahkan kursor ke akhir dokumen

Untuk dua perintah terakhir kadang perlu mengetuk dua kali.

Alexander Yushko
sumber
6

Mungkin tidak terkait, tetapi jika Anda ingin memulai baris baru setelah baris saat ini, Anda dapat menggunakan o di mana saja di baris tersebut.

greywh
sumber
3

Opsi termudah adalah dengan memasukkan $. Jika Anda bekerja dengan blok teks, Anda mungkin menghargai perintah {dan }untuk masing-masing memindahkan paragraf ke belakang dan ke depan.

paranza
sumber
2

Saya sudah terbiasa dengan Home / End membuat saya memulai dan mengakhiri baris dalam mode Insert (dari penggunaan di Windows dan saya pikir Linux), yang tidak didukung Mac. Ini sangat menjengkelkan karena ketika saya menggunakan vim pada sistem jarak jauh, saya juga tidak bisa dengan mudah melakukannya. Setelah beberapa percobaan dan kesalahan yang menyakitkan, saya datang dengan .vimrcbaris - baris ini yang melakukan hal yang sama, tetapi terikat ke Ctrl-A untuk memulai baris dan Ctrl-D untuk akhir baris. (Untuk beberapa alasan, Ctrl-E saya kira dicadangkan atau setidaknya saya tidak bisa menemukan cara untuk mengikatnya.) Nikmati.

:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>

Ada grafik yang baik di sini untuk kode karakter kontrol ASCII di sini untuk orang lain juga:

http://www.physics.udel.edu/~watson/scen103/ascii.html

Anda juga dapat melakukan Ctrl-V + Ctrl-, tetapi itu tidak menempel juga ke tempat-tempat seperti ini.

Marcus
sumber