See line breaks and carriage returns in editor
VimNewlineText EditorLine BreaksCarriage ReturnVim Problem Overview
Is there a text editor on Linux that allows me to see line breaks and carriage returns? Does Vim support this feature?
Vim Solutions
Solution 1 - Vim
To disagree with the official answer:
:set list
will not show ^M characters (CRs). Supplying the -b option to vi/Vim will work. Or, once Vim is loaded, type :e ++ff=unix
.
Solution 2 - Vim
Assuming your vim settings for :set listchars=...
is set to visualize the characters you are attempting to see, in this case the carriage return characters (typed with CTL + V, CTRM + M) —— otherwise, as reported in many of the comments on this answer, the ^M character will not show on :set list
:set list
in Vim will show whitespace. End of lines show as '$
' and carriage returns usually show as '^M
'.
Solution 3 - Vim
vi shows newlines (LF character, code x0A
) by showing the subsequent text on the next line.
Use the -b
switch for binary mode. For example , vi -b filename
or vim -b filename --
.
It will then show CR characters (x0D
), which are not normally used in Unix style files, as the characters ^M
.
Solution 4 - Vim
Just to clarify why :set list
won't show CR's as ^M
without e ++ff=unix
and why :set list
has nothing to do with ^M
's.
Internally when Vim reads a file into its buffer, it replaces all line-ending characters with its own representation (let's call it $
's). To determine what characters should be removed, it firstly detects in what format line endings are stored in a file. If there are only CRLF '\r\n'
or only CR '\r'
or only LF '\n'
line-ending characters, then the 'fileformat'
is set to dos
, mac
and unix
respectively.
When list
option is set, Vim displays $
character when the line break occurred no matter what fileformat
option has been detected. It uses its own internal representation of line-breaks and that's what it displays.
Now when you write buffer to the disc, Vim inserts line-ending characters according to what fileformat
options has been detected, essentially converting all those internal $
's with appropriate characters. If the fileformat
happened to be unix
then it will simply write \n
in place of its internal line-break.
The trick is to force Vim to read a dos
encoded file as unix
one. The net effect is that it will remove all \n
's leaving \r
's untouched and display them as ^M
's in your buffer. Setting :set list
will additionally show internal line-endings as $
. After all, you see ^M$
in place of dos
encoded line-breaks.
Also notice that :set list
has nothing to do with showing ^M
's. You can check it by yourself (make sure you have disabled list
option first) by inserting single CR using CTRL-V
followed by Enter
in insert mode. After writing buffer to disc and opening it again you will see ^M
despite list
option being set to 0.
You can find more about file formats on http://vim.wikia.com/wiki/File_format or by typing:help 'fileformat'
in Vim.
Solution 5 - Vim
Try the following command.
:set binary
In Vim, this should do the same thing as using the "-b" command line option. If you put this in your startup (i.e., .vimrc) file, it will always be in place for you.
On many *nix systems, there is a "dos2unix" or "unix2dos" command that can process the file and correct any suspected line ending issues. If there aren't any problems with the line endings, the files will not be changed.
Solution 6 - Vim
I suggest you to edit your .vimrc file, for running a list of commands.
Edit your .vimrc file, like this:
cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF
When you're executing Vim, the commands in file .vimrc are executed, and you can see this example:
My line with CRLF eol here ^M¶
Solution 7 - Vim
Solution 8 - Vim
You can view break lines using the gedit editor.
First, if you don't have it installed, for Debian/Ubuntu/Mint based distros:
sudo apt-get install gedit
For Fedora/CentOS/RedHat based distros:
sudo dnf install gedit
or
sudo yum install gedit
Now, install gedit plugins:
sudo apt-get install gedit-plugins
or
Under Gnome2, user plugins were put into ~/.gnome2/gedit/plugins/
For Gnome3: ~/.local/share/gedit/plugins/
Download the plugins from: https://help.gnome.org/users/gedit/stable/gedit-plugin-guide.html.en#gedit-additional-plugins
and select Draw Spaces plugin, enter on Preferences, and chose Draw new lines:
Using Visual Studio Code, you can install the Line endings extension.
Sublime Text 3 has a plugin called RawLineEdit that will display line endings and allow the insertion of arbitrary line-ending type
Shift + Ctrl + P and start type the name of the plugin, and toggle to show line endings.