vi commandline, baris dan kolom goto

17

Saya telah mencampur penggunaan emacsdan vi( vim) untuk waktu yang lama. Masing-masing memiliki kelebihan. Saya parse output kesalahan dari proses seperti kompilasi dan mendapatkan nomor baris dan kolom tapi saya hanya bisa menggunakan emacsuntuk langsung pergi ke baris dan kolom:

emacs +15:25 myfile.xml

dengan visaya hanya memiliki nomor baris (menurut halaman manual)

vi +15 myfile.xml

Ada opsi untuk pergi kursor posisi pada pola ( vi +/pattern myfile.xml) yang saya tidak pernah bisa berfungsi. Tapi itu tidak akan membantu saya karena polanya tidak selalu merupakan kejadian pertama dalam file.

Bagaimana saya bisa memulai visehingga ia pergi ke kolom 25 pada baris 15 dari file saya? Bisakah saya melakukan sesuatu dengan -copsi?

Dominique
sumber
3
Karena Anda tagged vim, Anda dianggap yang quickfixsistem, yang menjalankan compiler dari dalam vim, mem-parsing output kesalahan, populasikan daftar kesalahan (menavigasi dengan :cp, :cn, :clperintah), dan posisi kursor pada yang pertama?
Random832
Jika Anda membuka file in vi, dan ketik :15itu akan melompat ke baris 15 .. Semoga ini bisa membantu Anda
kode ninja

Jawaban:

17

Kamu bisa memakai:

vi '+normal 15G25|'  myfile.xml
Christa
sumber
2
penjelasan: sebagian besar perintah (yaitu, sebagian besar huruf) in vi dapat didahului oleh angka (atau rentang) untuk mengubah perilaku default atau mengulanginya (atau menerapkannya pada rentang tertentu). Di dalam vi, dalam mode perintah, Anda dapat melakukannya 15Guntuk menuju ke baris 15 dan 25|ke ke col 25. Dan Christa menunjukkan cara melakukan hal yang sama dari baris perintah.
Olivier Dulac
7

Dengan plugin file-line , Anda cukup menambahkan baris dan kolom ke nama file, baik ketika memanggil Vim dan di dalamnya dengan perintah seperti :edit:

vim myfile.xml:15:25
Ingo Karkat
sumber
Senang mengetahui ini ada, tetapi saya pikir saya akan menggunakan jawaban yang tidak memerlukan plugin tambahan
Dominique
@Dominique Anda juga dapat vim myfile.xml +15menggunakan baris tanpa plugin, tetapi tidak sejauh kolom yang saya tahu
Izkata
5

hanya untuk bersenang-senang ada -c 'normal 14j24l'yang akan menempatkan Anda pada baris 15 karakter 25

Hildred
sumber
4

Saya tidak tahu tentang -copsi ini, tetapi Anda harus dapat melakukannya:

vi '+cal cursor(15,25)' myfile.xml

(pastikan Anda mengutip karena kurung ())

Anthon
sumber
cursor()menggunakan indeks byte untuk kolom, tetapi biasanya jumlah karakter.
Ingo Karkat
@IngoKarkat Apakah itu penting? Teksnya UTF-8.
Dominique
2
Itu penting untuk karakter non-ASCII, yang diwakili oleh lebih dari satu byte. Juga, Tab dan karakter kontrol biasanya menempati lebih dari satu kolom tampilan.
Ingo Karkat
2

Perlu diperhatikan:

-c command 

Jalankan perintah ex yang diberikan saat startup. Hanya satu opsi -c yang diizinkan untuk vi ; Vim menerima hingga 10. Bentuk yang lebih lama dari opsi ini +command,, masih didukung.

The +commandmemiliki single yang sama ex commandpembatasan saat menggunakan vi.

Ini +/patternjuga terbatas pada satu perintah dengan vi.

(diambil dari vim dan mantan editor )

Bee Kay
sumber
1

Anda dapat menambahkan kode berikut ke vimrc Anda, Ketika Anda kembali ke file Anda, vim kembali secara otomatis ke posisi lama:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Teluk Persia
sumber