Apa yang dimaksud dengan Visual Studio dengan menormalkan akhir baris yang tidak konsisten?

238

Visual Studio sesekali memberi tahu saya:

Akhir baris dalam file-file berikut ini tidak konsisten. Apakah Anda ingin menormalkan akhir baris?

Ini kemudian memberi saya drop down dengan berbagai standar atau sesuatu, seperti Windows, Mac, Unix, dan beberapa yang Unicode.

Apa artinya ini dan apa yang akan terjadi jika saya mengklik Yes?

MetaGuru
sumber
Visual Studio menunjukkan pesan yang sama kepada saya, tetapi "file" yang dimaksud sebenarnya adalah folder! Apa artinya?!
Kolonel Panic
Saya membuat sedikit utilitas untuk melakukan ini ke seluruh direktori atau secara rekursif melalui sekumpulan direktori untuk semua file dari ekstensi tertentu (seperti * .c atau * .h), walaupun saya menggunakan Delphi, utilitas ini berfungsi untuk kode sumber Windows apa pun file. Kode sumber termasuk plus biner (exe). Ini akan melaporkan baris mana yang memiliki umpan baris tambahan (mis. Carriage return yang hilang) atau carriage return tambahan (mis. Feed line yang hilang). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P
1
Dapat disebabkan oleh git. Lihat juga: stackoverflow.com/questions/170961/…
Jess
2
Mereka seharusnya memiliki opsi dalam drop-down yang mengatakan 'mendukung jenis akhir baris paling umum dari sisa file / proyek'.
MetaGuru

Jawaban:

213

Apa yang biasanya berarti adalah bahwa Anda memiliki garis yang berakhir dengan sesuatu selain pasangan feed carriage return / line. Ini sering terjadi ketika Anda menyalin dan menempel dari halaman web ke dalam editor kode.

Normalisasi akhir baris hanya memastikan bahwa semua karakter akhir baris konsisten. Ini mencegah satu baris dari berakhiran \r\ndan yang lain berakhir dengan\r atau \n; yang pertama adalah pasangan garis akhir Windows, sedangkan yang lain biasanya digunakan untuk file Mac atau Linux.

Karena Anda berkembang di Visual Studio, Anda tentu ingin memilih "Windows" dari drop down. :-)

Ken White
sumber
1
bagaimana saluran berakhir tanpa carriage kembali ...?
MetaGuru
23
Jadi mengapa flip studio visual peduli bagaimana garis berakhir, tampaknya mengenali semua jenis yang berbeda, itu hanya harus bahagia dan tutup mulut.
MetaGuru
53
Ah, tetapi bagaimana jika Anda hanya menggunakan VS untuk memperbaiki sesuatu yang bukan untuk Windows? Perbaikan cepat pada utilitas Linux atau sesuatu yang lurus C / C ++, dan Anda tidak ingin CRLF ditambahkan? Tunggu-sekarang Anda ingin MS membaca pikiran Anda dan tahu mana yang harus digunakan? <g> Tim VS salah juga, bukan? Sheesh!
Ken White
6
Oh snap Ken, Anda benar, jika saya mengedit beberapa file yang saya rencanakan untuk dikompilasi di Linux dan saya tahu kompiler akan tersedak dan mati jika tidak memiliki akhiran yang dibutuhkan maka saya akan memiliki senang VS biarkan aku memilih ... Terima kasih!
MetaGuru
19
Masalahnya bukan bahwa VS tidak dapat mengatasi akhir baris Unix - itu bisa. Peringatan itu memberi tahu Anda bahwa akhir baris tidak konsisten - yaitu beberapa baris dalam file adalah CRLF dan beberapa LF. VS akan mengatasinya tetapi aplikasi lain dalam rantai alat Anda mungkin tidak, karenanya memperingatkan Anda. Jika Anda tidak peduli dengan hal ini maka matikan peringatan: Opsi -> Lingkungan -> Dokumen -> 'Periksa untuk akhiran saluran yang konsisten pada pemuatan'. Peringatan ini bisa sangat berguna jika Anda bekerja pada produk di berbagai platform.
the_mandrill
75

Beberapa baris diakhiri dengan \n.

Beberapa baris lainnya diakhiri dengan \r\n.

Visual Studio menyarankan Anda untuk membuat semua garis berakhir sama.

Alex Reitbort
sumber
40

Jika Anda menggunakan Visual Studio 2012:

Buka menu FileAdvanced Save Options → pilih jenis akhir baris sebagai Windows (CR LF) .

pankaj
sumber
1
Opsi itu tidak muncul di menu File saya untuk Visual Studio 2010 Ultimate Version 10.0.40219.1 SP1Rel saya.
DOK
1
@DOK, pada menu File saya di Visual Studio 2010 versi Premium ya !!
Peter
4
Jika Anda tidak dapat melihat opsi, Anda dapat menyesuaikan menu file Anda dengan pergi ke Tools-> Customize, pergi ke tab perintah dan menambahkan perintah.
Rob
Apakah ada pengaturan umum yang memengaruhi semua file secara bersamaan? Ini adalah rasa sakit untuk melakukan ini untuk semua sumber di bawah solusi.
Klaus
12

Untuk menghidupkan / mematikan opsi, ikuti langkah-langkah di bawah ini dari menu bar:

AlatPilihanLingkunganDokumenPeriksa ujung garis yang konsisten pada beban

CodingYoshi
sumber
7

File yang Anda edit telah diedit dengan beberapa editor lain yang tidak menggunakan akhiran baris yang sama, menghasilkan file dengan akhiran garis campuran.

Karakter ASCII yang digunakan untuk akhiran baris adalah:

CR, Carriage Return
LF, Line Feed

Windows = CRLF
Mac OS 9 atau lebih lama = CR
Unix = LF

Monowerker
sumber
6

Artikel baris baru Wikipedia mungkin membantu Anda. Berikut ini kutipannya:

Konvensi baris baru yang berbeda sering menyebabkan file teks yang telah ditransfer antar sistem dari jenis yang berbeda ditampilkan secara tidak benar. Misalnya, file yang berasal dari sistem Unix atau Apple Macintosh dapat muncul sebagai satu garis panjang pada beberapa program yang berjalan di Microsoft Windows. Sebaliknya, saat melihat file yang berasal dari komputer Windows pada sistem Unix, CR tambahan dapat ditampilkan sebagai ^ M atau di akhir setiap baris atau sebagai jeda baris kedua.

Richard Ev
sumber
5

Ini berarti bahwa, misalnya, beberapa baris teks Anda dengan <Carriage Return><Linefeed>(standar Windows), dan sebagian berakhir hanya dengan a<Linefeed> (standar Unix).

Jika Anda mengklik 'ya' ini, end-of-line dalam file sumber Anda akan dikonversi untuk memiliki semua format yang sama.

Ini tidak akan membuat perbedaan apa pun pada kompiler (karena end-of-lines hanya dihitung sebagai spasi putih), tetapi mungkin membuat beberapa perbedaan pada alat lain (mis. 'Diff' pada sistem kontrol versi Anda).

ChrisW
sumber
4

Ini bukan hanya Visual Studio ... Ini akan menjadi alat apa pun yang membaca file, kompiler, tautan, dll. Yang harus dapat menanganinya.

Secara umum (untuk pengembangan perangkat lunak) kami menerima masalah akhir baris multi platform, tetapi biarkan perangkat lunak kontrol versi menghadapinya.

Peter Y
sumber
1
Saya setuju. Yang terbaik adalah membiarkan sistem SCM Anda melakukannya. Jika Anda menggunakan svn, lihat juga stackoverflow.com/questions/15687/…
kgriffs
Setuju. Apa yang terjadi jika saya mengerjakan proyek dan saya di Windows dan rekan setim saya menggunakan Mac. Kami akan terus mengubah CR ke CRLF dan kembali lagi. Terbaik untuk membiarkan SCM abstrak itu. Sebagian besar jawaban hanya berasumsi bahwa orang bekerja sendiri atau semua orang yang mengerjakan kode menggunakan Windows.
bytedev
3

Saat Anda menyalin menempelkan sesuatu dari web, Anda mungkin mendapatkan akhiran garis yang tidak konsisten.
Untuk memperbaikinya, Anda dapat menggunakan ekstensi Visual studio "Line Endings Unifier" yang dapat membuat akhir baris konsisten secara otomatis saat menyimpan file.

masukkan deskripsi gambar di sini

Jay Shah
sumber
2

Ada tambahan untuk Visual Studio 2008 yang mengubah format akhir baris ketika file disimpan. Anda dapat mengunduhnya di sini: http://grebulon.com/software/stripem.php


sumber
Ini dapat membantu ketika Anda mendapatkan kesalahan "ujung garis tidak konsisten" dari svn.
kgriff