可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there a way to delete the newline at the end of a line in Vim, so that the next line is appended to the current line?
For example:
Evaluator<T>():
_bestPos(){
}
I'd like to put this all on one line without copying lines and pasting them into the previous one. It seems like I should be able to put my cursor to the end of each line, press a key, and have the next line jump onto the same one the cursor is on.
End result:
Evaluator<T>(): _bestPos(){ }
Is this possible in Vim?
回答1:
If you are on the first line, pressing (upper case) J will join that line and the next line together, removing the newline. You can also combine this with a count, so pressing 3J
will combine all 3 lines together.
回答2:
Certainly. Vim recognizes the \n character as a newline, so you can just search and replace.
In command mode type:
:%s/\n/
回答3:
While on the upper line in normal mode, hit Shift+j.
You can prepend a count too, so 3J
on the top line would join all those lines together.
回答4:
J
deletes extra leading spacing (if any), joining lines with a single space. (With some exceptions: after /[.!?]$/
, two spaces may be inserted; before /^\s*)/
, no spaces are inserted.)
If you don't want that behavior, gJ
simply removes the newline and doesn't do anything clever with spaces at all.
回答5:
In vim:
:set noendofline binary
:w
回答6:
All of the following assume that your cursor is on the first line:
Using normal mappings:
3Shift+J
Using Ex commands:
:,+2j
Which is an abbreviation of
:.,.+2 join
Which can also be entered by the following shortcut:
3:j
An even shorter Ex command:
:j3
回答7:
set backspace=indent,eol,start
in your .vimrc will allow you to use backspace
and delete
on \n
(newline) in insert mode.
set whichwrap+=<,>,h,l,[,]
will allow you to delete the previous LF in normal mode with X
(when in col 1).
回答8:
It probably depends on your settings, but I usually do this with A<delete>
Where A
is append at the end of the line. It probably requires nocompatible
mode :)
回答9:
<CURSOR>Evaluator<T>():
_bestPos(){
}
cursor in first line
NOW, in NORMAL MODE do
shift+v
2j
shift+j
or
V2jJ
:normal V2jJ
回答10:
I would just press A (append to end of line, puts you into insert mode) on the line where you want to remove the newline and then press delete.
回答11:
if you don't mind using other shell tools,
tr -d "\n" < file >t && mv -f t file
sed -i.bak -e :a -e 'N;s/\n//;ba' file
awk '{printf "%s",$0 }' file >t && mv -f t file
回答12:
The problem is that multiples char 0A (\n) that are invisible may accumulate.
Supose you want to clean up from line 100 to the end:
Typing ESC and : (terminal commander)
:110,$s/^\n//
In a vim script:
execute '110,$s/^\n//'
Explanation: from 110 till the end
search for lines that start with new line (are blank)
and remove them