bungkus garis vim dengan indent


20

Vim / gvim akan membungkus garis panjang seperti ini:

000000000000000000000000000000000000|
00000000000000                      |
    11111111111111111111111111111111|
111111111111111111                  |
    22222222222222222222222222222222|
222222222222222222                  |
        3333333333333333333333333333|
3333333333333333333333              |

Apakah ada cara untuk membuat Vim menggunakan garis-garis seperti ini sebagai gantinya:

000000000000000000000000000000000000|
 00000000000000                     |
    11111111111111111111111111111111|
     111111111111111111             |
    22222222222222222222222222222222|
     222222222222222222             |
        3333333333333333333333333333|
         3333333333333333333333     |

Saya ingin garis yang dibungkus mulai sedikit melewati indentasi dari mana garis itu dimulai. (Untuk lebih jelasnya, saya berbicara tentang bungkus, bukan textwidth.)

Saya ingin lekukan garis dipertimbangkan dalam pembungkus baris itu sehingga struktur kode tidak disembunyikan oleh garis yang dibungkus.

Jawaban:


17

UPDATE: Fungsi ini mendarat di vim 7.4.338, meskipun Anda akan menginginkan 7.4.354 atau yang lebih baru .


Jadi rupanya ini membutuhkan tambalan untuk Vim . Ada tambalan oleh Vaclav Smilauer dari belakang pada tahun 2007. Saya memperbarui tambalan untuk bekerja dengan Vim 7.2.148 dari Fedora 11. Tapi sepertinya itu berhasil.


1
Ketika Fedora merilis pembaruan untuk Vim, saya memperbarui tambalan. Lihat retracile.net/wiki/VimBreakIndent untuk yang terbaru.
retracile

Poin bonus kepada seseorang yang bisa menjelaskan cara agar ini bisa bekerja dengan MacVim.
donat

Di mana tambalan itu? Situs itu tidak terhubung ke apa pun yang bisa saya lihat
puk

@puk: Maaf, peningkatan perangkat lunak utama telah mengubah beberapa lokasi tautan. Saya sudah memperbaikinya sekarang.
retracile

1
Pada hari ini (25 Juni 2014) tambalan yang rusak secara resmi merupakan bagian dari Vim 7.4 - itu ditambahkan oleh tambalan 338 dan 345.
Heptite

13

Di .vimrc Anda:

set wrap               " soft-wrap lines

" requires +linebreak compile-time option (not in the 'tiny' and 'small' builds); check your :version
set showbreak=----->   " prefix for soft-wrapped lines (no actual line break character)
"set linebreak          " soft-wrap lines only at certain characters (see :help breakat)

" If you like line numbers, you may want this instead:
"set number
"set showbreak=------>\  " line up soft-wrap prefix with the line numbers
"set cpoptions+=n        " start soft-wrap lines (and any prefix) in the line-number area

Atau ketik :set showbreak=----->saja sesi apa saja.

Untuk referensi, jejak penelitian saya (Vim 6.2): :help 'wrap'-> :help 'linebreak'-> ( :help 'showbreak'-> :help 'cpoptions', :help 'breakat')


Sangat keren, tapi tidak terlalu berarti. Anda mengambilnya sedikit lebih harfiah dari yang saya maksudkan, jadi kesalahan saya di sana. Saya akan melihat apakah saya bisa mengklarifikasi.
retracile

1

Solusi untuk pertanyaan Anda dapat dicapai dengan menetapkan dua parameter di vimrc:

Untuk memutus garis dengan lekukan yang sama: set breakindent

Dan satu ruang untuk indentasi garis yang terbungkus lembut: let &showbreak=' '

Ini akan bekerja seperti ini:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |

0

Bukan jawaban sempurna yang Anda cari, tapi inilah yang saya lakukan untuk menyiasati kurangnya indentasi yang tepat dari vim.

Pertama, unduh panduan indentasi Nathanael Kane (opsional) karena lebih baik mengindikasikan level indentasi Anda, bahkan pada titik di mana Anda dapat mengatur tabwidth menjadi hanya 2 spasi!

Kedua, petakan kombinasi tombol untuk beralih bungkus kata. Saya punya set ke 'r' untuk 'bungkus' ('w' adalah untuk menyimpan) seperti itu

:noremap <leader>r :set nowrap! <CR>

Kemudian saya selalu memiliki penutup kata, karena itu lebih estetis, dan saya dengan cepat mengaktifkannya jika saya perlu mengedit baris.


0

"Pemecahan masalah" busuk yang saya gunakan saat ini, adalah memiliki lekukan yang tetap tetapi besar dalam awalan. Kelihatannya bagus, selama indentasi tetap ini lebih besar dari indentasi garis yang dibungkus, yang merupakan kasus sebagian besar waktu.

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.