it-swarm-id.com

Tab dan spasi di vim

Bagaimana cara mencegah vim dari mengganti spasi dengan tab saat autoindent aktif?

Contoh: jika saya memiliki dua tab dan 7 spasi di awal baris, dan tabstop=3, dan saya menekan Enter, baris berikutnya memiliki empat tab dan 1 spasi di awal, tapi saya tidak ingin itu ...

71
RQ

Mungkin merupakan ide yang bagus untuk tidak menggunakan tab sama sekali.

:set expandtab

Jika Anda ingin mengganti semua tab dalam file Anda menjadi 3 spasi (yang akan terlihat sangat mirip dengan tabstop=3):

:%s/^I/   /

(dimana ^I adalah TAB karakter)

Dari VIM bantuan online:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be Nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.
78
user11211

Anda dapat mengonversi semua TAB ke SPACE

:set et
:ret!

atau konversikan semua SPACE ke TAB

:set et!
:ret!
42
kev

semua yang saya inginkan adalah baris yang diindentifikasi secara otomatis untuk memiliki karakter indentasi yang sama persis dengan baris sebelumnya.

:help copyindent

'copyindent''ci'boolean (default tidak aktif); lokal ke buffer; {tidak dalam Vi}

Salin struktur indentasi baris yang ada saat autoindenting baris baru. Biasanya indentasi baru direkonstruksi oleh serangkaian tab diikuti oleh spasi sesuai kebutuhan (kecuali 'expandtab' diaktifkan, dalam hal ini hanya spasi yang digunakan). Mengaktifkan opsi ini membuat baris baru menyalin karakter apa pun yang digunakan untuk membuat indentasi pada baris yang ada. Jika indentasi baru lebih besar dari pada garis yang ada, ruang yang tersisa diisi dengan cara normal.

CATATAN: 'copyindent' diatur ulang ketika 'kompatibel' diatur.
Lihat juga 'preserveindent' .

:help preserveindent

'preserveindent''pi'boolean (default tidak aktif); lokal ke buffer; {tidak dalam Vi}

Saat mengubah indentasi baris saat ini, pertahankan sebanyak mungkin struktur indentasi. Biasanya indentasi diganti dengan serangkaian tab diikuti oleh spasi seperti yang diperlukan (kecuali 'expandtab' diaktifkan, dalam hal ini hanya spasi yang digunakan). Mengaktifkan opsi ini berarti indentasi akan mempertahankan sebanyak mungkin karakter yang ada untuk indentasi, dan hanya menambahkan tab atau spasi tambahan sesuai kebutuhan.

CATATAN: Saat menggunakan ">>" beberapa kali, indentasi yang dihasilkan adalah campuran dari tab dan spasi. Anda mungkin tidak suka ini.
CATATAN: 'preserveindent' diset ulang ketika 'kompatibel' diatur.
Lihat juga 'copyindent' .
Gunakan: retab untuk membersihkan ruang putih.

41

Inilah bagian dari .vimrc Saya:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Ini berfungsi baik untuk saya karena saya benar-benar tidak ingin tab dalam kode sumber saya. Tampaknya dari pertanyaan Anda bahwa Anda ingin menjaga dua tab dan tujuh spasi pada baris berikutnya, dan saya tidak yakin ada cara untuk mengajarkan vim untuk mengakomodasi gaya itu.

25
Greg Hewgill

Mungkin bagian bawah ini dapat membantu Anda?

Standar vi mengartikan kunci tab secara harfiah, tetapi ada alternatif turunan vi populer yang lebih pintar, seperti vim. Untuk mendapatkan vim menafsirkan tab sebagai perintah `` indent '' alih-alih perintah insert-a-tab, lakukan ini:

set softtabstop=2
1
svrist

Jika Anda ingin mengganti semua tab dengan spasi berdasarkan pengaturan 'ts', Anda dapat menggunakan: retab. Itu juga bisa melakukan sebaliknya.

1
graywh