Saya mempelajari Vim tetapi saya pikir ini adalah tugas yang sederhana tetapi saya tidak dapat membuatnya berfungsi. Saya memiliki browser SO tetapi solusinya tidak berfungsi untuk saya.
Saya mencoba memasukkan file (xml) dengan benar. Perintah yang saya gunakan adalah:
gg=G
atau ggVG = (membuat yang ini sendiri mungkin melakukan sesuatu yang berbeda;))
.Vimrc saya adalah:
syntax on
filetype plugin indent on
set nu
:set ft? indentexpr?
Does it readfiletype=xml indentexpr=XmlIndentGet(v:lnum,1)
?!m'ggVG=''
, yang hanya menyimpan garis tempat Anda berada dan kembali ke sana setelah mengindentifikasi kembali file tersebut.Jawaban:
Saya suka jawaban Berei. Namun, menurut saya yang berikut ini sedikit lebih fleksibel karena Anda tidak perlu mengubah
vimrc
file Anda . Selain itu, lebih mudah untuk memformat bagian tertentu dari file XML (sesuatu yang sering saya lakukan).Pertama, sorot XML yang ingin Anda format.
Kemudian, dalam mode normal, ketik
! xmllint --format -
Baris perintah Anda di bagian bawah akan terlihat seperti ini:
:'<,'>!xmllint --format -
Lalu tekan enter.
Penjelasan Teknis
Teks yang dipilih dikirim ke
xmllint
perintah, lalu--format
'ed, dan hasilnyaxmllint
ditempatkan di atas teks yang Anda pilih di vim. Di-
akhir perintah adalah untuk menerima input standar - yang, dalam hal ini, adalah teks terpilih yang dikirim ke vimxmllint
.sumber
:%!xmllint --format -
,%
berarti seluruh lingkup file xml ini.apt-cache search
, bukanapt-get
, saat mencari paket dan isi paket.libxml2-utils
berisi alat yang hilang.Gunakan program eksternal untuk memasukkan
xml
file Anda . Dalam hal ini saya telah memilihxmllint
, jadi atur perintah keequalprg
opsi:Sekarang Anda bisa mengeksekusi
untuk
xmllint
memformatxml
file Anda .Untuk mendapatkannya setiap kali Anda gunakan vim, gunakan
autocommand
untuk menyetelnya.autocommand
dari komentar di bawahsumber
au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
. Sumber - ku1ik.com/2011/09/08/…libxml2-utils
paket untuk mendapatkan xmllintSolusi sederhana yang saya suka yang tidak memerlukan alat pihak ketiga adalah memasukkan baris baru sebelum setiap tag pembuka '<...>'. Kemudian Anda dapat menggunakan indentasi otomatis vim standar. Pendeknya:
%s/</\r</g
gg=G
ke indentasi otomatissumber
%s/></>\r</g
, agar setiap elemen teks tetap pada baris yang sama.%s/> *</>\r</g
Ini mudah dicapai setelah ~ / .vimrc diatur dengan benar.
Setel opsi berikut di ~ / .vimrc:
Ini memungkinkan Anda untuk memindahkan kursor ke atas file dan menjorok ke akhir: gg = G
Anda juga dapat memilih teks yang diinginkan dengan mode visual dan tekan = untuk membuat indentasi.
sumber
.vimrc
gantinya.bashrc
.Jawaban singkat: Nyalakan matchit.vim . Anda dapat menambahkan
packadd matchit
ke Anda.vimrc
, atau menggunakan vim-sensible , yang mengaktifkannya secara default.Jawaban panjang: Saya telah mencoba banyak strategi untuk mengindentasi XML secara otomatis di Vim, termasuk pendekatan xmllint yang dibahas di wiki Vim . Masalah dengan
xmllint
(dan pendekatan yang sama dengan alat CLI eksternal lainnya sepertixmlformat
dantidy
, juga) adalah bahwa mereka semua bersikeras memeras baris baru yang kosong. Jika semua yang Anda inginkan adalah mengindentasi XML Anda, tanpa menghapus baris kosong, komentar dan / atau pemformatan yang disengaja lainnya, makaxmllint
itu bukanlah pilihan terbaik.Ternyata perintah Vim's equals (=) sudah mendukung XML, selama script matchit.vim diaktifkan. Salah satu cara super mudah untuk mengaktifkannya adalah dengan mengadopsi vim-sensible tpope . Cara lainnya adalah menambahkan
packadd matchit
file.vimrc
. Kemudian, pemformatan XML akan "langsung berfungsi" di luar kotak.sumber
matchit.vim
adalah solusi sebenarnya. Anda dapat mengaktifkannya di Andavimrc
dengan menambahkan baris ini:packadd matchit
Di VIM, saya membuat indentasi otomatis seluruh file (menggunakan tab keras) menggunakan perintah berikut:
Ini
^I
adalah karakter tunggal yang Anda hasilkan melalui: CTRL+ v, CTRL+isumber
Saya memiliki masalah yang sama. Ternyata, garis itu
di
.vimrc
penyebab masalah saya. Pastikan saja, Anda tidak memilikinya.sumber
Jawaban Jesse Hogan bagus, tapi saya lebih suka jawaban yang lebih sederhana:
Saat Anda berada di vim dan file XML Anda dibuka, dalam mode normal tulis ini:
lalu tekan Enter. Semua file XML Anda akan diformat.
ingat Anda harus menginstal xmllint sebelumnya.
sumber
bagi mereka satu yang menggunakan
coc.nvim
Plugin, Anda dapat menginstalcoc-xml
oleh:CocInstall coc-xml
, maka pemetaan kunci format file konfigurasi Anda:nmap <silent> fm <Plug>(coc-format)
. Mulai sekarang, Anda tidak hanya dapat memformat file xml tetapi file lain dengan sangat mudahsumber