Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 删除Vim中的换行符_Unix_Vim_Shell_Ssh_Vi - Fatal编程技术网

Unix 删除Vim中的换行符

Unix 删除Vim中的换行符,unix,vim,shell,ssh,vi,Unix,Vim,Shell,Ssh,Vi,有没有办法删除Vim中一行末尾的换行符,以便将下一行追加到当前行 例如: Evaluator<T>(): _bestPos(){ } Evaluator(): _bestPos(){ } 我想把这一切都放在一行,而不复制行和粘贴到前一行。看起来我应该能够将光标放在每一行的末尾,按下一个键,让下一行跳转到光标所在的行上 最终结果: Evaluator<T>(): _bestPos(){ } Evaluator():_bestPos(){} 这在Vim中可能吗

有没有办法删除Vim中一行末尾的换行符,以便将下一行追加到当前行

例如:

Evaluator<T>():
    _bestPos(){
}
Evaluator():
_bestPos(){
}
我想把这一切都放在一行,而不复制行和粘贴到前一行。看起来我应该能够将光标放在每一行的末尾,按下一个键,让下一行跳转到光标所在的行上

最终结果:

Evaluator<T>(): _bestPos(){ }
Evaluator():_bestPos(){}

这在Vim中可能吗?

当然可以。Vim将\n字符识别为换行符,因此您只需搜索和替换即可。 在命令模式类型中:

:%s/\n/

这可能取决于您的设置,但我通常使用
A


其中,
A
附加在行的末尾。它可能需要不兼容模式:)

我只需在要删除换行符的行上按A(追加到行尾,使您进入插入模式),然后按delete。

在正常模式下的上一行,按Shift+j


您也可以预先添加一个计数,这样顶行上的
3J
将把所有这些行连接在一起。

如果您在第一行,按(大写)J将把该行和下一行连接在一起,删除换行符。您还可以将其与计数组合,因此按
3J
将所有3行组合在一起。

如果您不介意使用其他shell工具

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
tr-d“\n”t&&mv-f t文件
sed-i.bak-e:a-e'N;s/\n/;ba'文件
awk'{printf“%s”,$0}'文件>t&&mv-ft文件

J
删除额外的行距(如果有),用单个空格连接行。(除了一些例外:在
/[.!?]$/
之后可以插入两个空格;在
/^\s*)/
之前,不插入空格。)

如果您不希望出现这种行为,
gJ
只会删除换行符,而不会对空格做任何巧妙的处理

<CURSOR>Evaluator<T>():
    _bestPos(){
}


:normal V2jJ

以下所有操作均假定光标位于第一行:

使用法线映射:

3档+J

使用Ex命令:

:,+2j
它是的缩写

:.,.+2 join
也可以通过以下快捷方式输入:

3:j

甚至更短的Ex命令:

:j3

正如前面提到的其他答案一样,(大写)
J
和search+replace for
\n
通常可用于去除换行符和连接行

但为了去掉最后一行中的尾随换行符,您需要在Vim中执行以下操作:

:set noendofline binary
:w
在插入模式下,.vimrc将允许您在
\n
(换行符)上使用
退格
删除

set whichwrap+=<,>,h,l,[,]
设置包裹+=,h,l,[,]

将允许您在正常模式下使用
X
(在列1中时)删除上一个LF。

问题是不可见的字符0A(\n)的倍数可能会累积。 Supose您想从第100行清理到最后:

键入ESC和:(终端指挥官)

在vim脚本中:

execute '110,$s/^\n//'
说明:从110到年底 搜索以新行开头的行(为空)

然后去掉它们

遗憾的是,这似乎对我不起作用;这可能是我错过的一个PuTTY设置。可能是vi backspace选项:
:帮助“backspace”
谢谢,但我不希望进行全局搜索和替换。删除%会解决这个问题。那么它只会发生在光标所在的行上。或者,您可以指定一个范围,例如:11,15s/\n/(第11-15行)或:,+7s/\n/(这一行和接下来的七行)或:-3,s/\n/(前三行和这一行)。。。你得到了主意,或者你可以选择一个
V
-isualblock并在上面替换。你不认为这有点过分了吗?不,不是。你为什么认为这太过分了?在Vim内执行此操作是手动的。这取决于您是想每次手动完成,还是只需执行这些一行程序即可立即完成。维姆是一名编辑。任何可以处理文件的工具,基本上都是伪装的“编辑器”。在vim中打开文件并使用
ggVGJ
更容易。当然,如果您发现每次需要以这种方式更改数据时手动操作更容易的话。着手另外,试着在一个大文件上这样做;我只是在压缩几行代码。正如另一个答案中所指出的,
gJ
将避免添加Vim在使用
J
时可能选择添加的空格。您也可以使用
V
选择要加入的所有行(可视行模式)然后按
J
gJ
如果要保持光标位置,请使用
:join
:join,它将连接保持光标位置的线,并且在连接点处不保留任何空间。您还可以像这样映射它:
nnoremap j:joing
nnoremap gj:join.Del在vim的插入模式中的行末尾,用于为我工作。但不是每一个航站楼都是这样,”我通常会说“是的,这就是我来这里的原因;找到更好的方法;)。VIM的全部要点不是把你的手从本行移走。问题是在文件中间连接两条线——这个答案在文件末尾删除了换行符,这不是我问的。这对我起作用。我试图用vim删除单行文件末尾的换行符。为什么
:set noendofline
在没有
二进制文件的情况下无法工作?虽然这不是OP的具体问题,但这是我的问题,一次互联网搜索让我来到这里,所以谢谢!它们之间没有空格
:j!3
set backspace=indent,eol,start
set whichwrap+=<,>,h,l,[,]
:110,$s/^\n//
execute '110,$s/^\n//'