在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?

时间:2021-11-02 07:07:54

1。 geany , 写一个页面,如 4.png,末尾没有 LF
2. 用 vim 打开这个文件,什么也不做,只 :w ,如 5.png
3.返回到 geany , reload the file . 如 6.png
4. 会反现多了一个 LF !!!!!
这个不好贴图,我把图片传到这个网页了。
http://blog.csdn.net/shengshuai/archive/2010/04/23/5518772.aspx
望高手帮忙。其实这个换行也没有什么,但这是要要和Ucenter通信,一用vim编辑就会把这个换行加上。导致通信失败。这个在gedit 下也看不到,只有在 geany 下才看到多了一行。

在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?
在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?
在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?
在vim中保存一个文件,会自动在文件的末尾加一个换行符。怎么去掉这个设置?

23 个解决方案

#1


用 vim 编辑,文件最后会多出一行来。晕。

#2


文件格式问题吧,尝试设置vim的
fileformat

#3


我帖一下我的设置

"LastModified: 


let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
set fileformat=unix
set nobackup
"set autoread
set autowrite
filetype on

" 加上这个会花屏
"set lines=30
"set columns=90
winpos 100 100
"set guioptions-=m

" 启用鼠标
set mouse=a
"set mousehide
nnoremap <F4> :call g:Jsbeautify()<CR>

nnoremap <C-s> :w<CR> 




"下面两行在进行编写代码时,在格式对起上很有用; 
"第一行,vim 使用自动对起,也就是把当前行的对起格式应用到下一行; 
"第二行,依据上面的对起格式,智能的选择对起方式,对于类似C 语言编 
"写上很有用
"set autoindent
set smartindent

"查询时非常方便,如要查找book 单词,当输入到/b 时,会自动找到第一
"个b 开头的单词,当输入到/bo 时,会自动找到第一个bo 开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch
set hlsearch


" 单行注释
set comments=://
" 段落注释
set comments=s1:/*,mb:*,ex0:/


"显示不完整的命令。
"showcmd 要在nocp 后面才有用
"set nocp
"set showcmd

" 命令行高度
"set cmdheight=1


" do not wrap lines
"set nowrap
"添加水平滚动条
"set guioptions+=b

" 显示空格,tab,行尾
set list
set lcs=tab:>-,trail:-


" 断行
set lbr       "不在单词中间断行
set fo+=mB    "打开断行模块对亚洲语言支持


" 使用F8打开Taglist
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=0
"let Tlist_Show_Menu = 1
" 增强检索功能
"set tags=./tags,./../tags,./**/tags

"set guioptions-=T
"set dictionary-=~/.vim/funclist.txt dictionary+=~/.vim/funclist.txt
"set complete-=k complete +=k





"source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
"source $VIMRUNTIME/compiler/php.vim

behave mswin

set nu
set ruler
set history=1000

" PHP 折叠
let php_folding =1
" 缩进
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
"set expandtab
" 使用缩进进行折叠
"set fdm=indent
"set fdc=4

set backspace=indent,eol,start


"set encoding=utf8
" 针对C语言的缩进
"set cindent



syntax on
"set syntax=php

"au GUIEnter * simalt ~x

autocmd BufWritePre,FileWritePre *.html   ks|call LastMod()|'s



" line("$") 统计列数
fun LastMod()
let l = line("$")
    "exe "1," . l . "s/Last modified: .*/Last modified: " . strftime(" %Y %b %d %X") ."/g"
exe "1," . l . "s/?>\n*/?>/g"
endfun

colorscheme koehler

"autocmd FileType c set ofu=ccomplete#Complete
"autocmd FileType php set ofu=phpcomplete#CompletePHP
"autocmd FileType python set ofu=pythoncomplete#Complete
"autocmd FileType javascript set ofu=javascriptcomplete#CompleteJS
"autocmd FileType html set ofu=htmlcomplete#CompleteTags
"autocmd FileType css set ofu=csscomplete#CompleteCSS
"autocmd FileType xml set ofu=xmlcomplete#CompleteTags

"配置Vim的智能补全, 即所谓的Omni Completion
"fun! OmniComplete()
" let left = strpart(getline('.'), col('.') - 2, 1)
" if left =~ "^$"
" return ""
" elseif left =~ ' $'
" return ""
" else
" return "\<C-x>\<C-o>"
" endfun
" inoremap <silent> <S-Tab> <C-R>=OmniComplete()<CR>



"配置Tab键来智能补全tags:
fun! KeywordComplete()
let left = strpart(getline('.'), col('.') - 2, 1)
if left =~ "^\t*$"
return "\<Tab>"
elseif left =~ ' $'
return "\<Tab>"
else
return "\<C-N>"
endfun
inoremap <silent> <Tab> <C-R>=KeywordComplete()<CR>

#4


这个我试了一下。 不但 utf-8 ,就是 gb13010 ,gb2312 都会在文件末尾加一个换行符。

#5


本来加了一个操作,在文件保存时去掉最后的\n ,可能也没写对,不起作用。真实后来想想,这个是在写入的时候加的。就算在写入前对这缓冲区的文件处理,在写入到文件时还是会加一个换行。

autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s



" line("$") 统计列数
fun LastMod()
let l = line("$")
  "exe "1," . l . "s/Last modified: .*/Last modified: " . strftime(" %Y %b %d %X") ."/g"
exe "1," . l . "s/?>\n*/?>/g"
endfun

#6


set fileformat=dos 或者unix试一下

#7


上面的只是一个 html 做的测试,本打算把文件最后一行的 ?>\n 换成 ?> ,不过这个也根本不起作用。

#8


引用 6 楼 yifanernei 的回复:
set fileformat=dos 或者unix试一下


好的。

#9


set fileformat=dos 也不行。。。。还是会多一个。晕了。

说一下。在 geany 中有一个选项,设置在文件保存时保证文件末尾有一个空行,设置了这个 ,用 geany 保存文件的时候就不会在文件结尾加一个换行了,还有 gedit vim 黙认也是在文件保存时加一个换行。我想 gedit 没有设置的地方,vim 一定可以设置。

#10


set fileformat=mac呢
这种情况应该就是这个选项引起的吧

#11


引用 10 楼 yifanernei 的回复:
set fileformat=mac呢
这种情况应该就是这个选项引起的吧


奇怪了,这个不管设置成 dos unix mac 都不管用呢。

#12


dos  应该是  \r\n
unix 应该是  \n
mac  应该是  \r

是这样的吧

#13


这里有一个文档,我再看http://man.chinaunix.net/newsoft/vi/doc/usr_23.html

#14


是的,你分别用geany和vimx编辑一个文件,然后用二进制查看文件内容中换行符
通过比较应该就能得到需要的fileformat了

#15


这个能修改文件格式,可是我们这边通一用 unix 格式,哎~~~,不过也不能解决保存时会自动增加换行符的问题。

#16


怎么办?还有没有高人来指定一下?

#17


.vimrc 里加入

set binary
set noendofline

#18


引用 17 楼 mymtom 的回复:
.vimrc 里加入
HTML code

set binary
set noendofline

管用吗?

#19


引用 17 楼 mymtom 的回复:
.vimrc 里加入
HTML code

set binary
set noendofline


果然是高人啊。太崇拜了啊。~~~

#20


不过这样的话,中文显不了了。。。。

#21


看到一篇文章说 unix 以行为单位。所以这个 换行也是正常的。是不是我的这个不允许有换行的做法是错误的啊。

#22


引用 21 楼 shengshuai 的回复:
看到一篇文章说 unix 以行为单位。所以这个 换行也是正常的。是不是我的这个不允许有换行的做法是错误的啊。

传统的vi是不会加这个换行的。但是有些gcc的某些版本在需要这个最后的换行,所以VIM默认会加个换行。
"unix 以行为单位"也是一个很好的理由。

由于用gcc的原因,我已经习惯了在文件最后加一个空行。
现在用VIM就发现保存的文本文件的最后有两个空行。

#23


终于找到方法了。特意来分享一下:
autocmd FileType php set bin noeol

#1


用 vim 编辑,文件最后会多出一行来。晕。

#2


文件格式问题吧,尝试设置vim的
fileformat

#3


我帖一下我的设置

"LastModified: 


let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
set fileformat=unix
set nobackup
"set autoread
set autowrite
filetype on

" 加上这个会花屏
"set lines=30
"set columns=90
winpos 100 100
"set guioptions-=m

" 启用鼠标
set mouse=a
"set mousehide
nnoremap <F4> :call g:Jsbeautify()<CR>

nnoremap <C-s> :w<CR> 




"下面两行在进行编写代码时,在格式对起上很有用; 
"第一行,vim 使用自动对起,也就是把当前行的对起格式应用到下一行; 
"第二行,依据上面的对起格式,智能的选择对起方式,对于类似C 语言编 
"写上很有用
"set autoindent
set smartindent

"查询时非常方便,如要查找book 单词,当输入到/b 时,会自动找到第一
"个b 开头的单词,当输入到/bo 时,会自动找到第一个bo 开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch
set hlsearch


" 单行注释
set comments=://
" 段落注释
set comments=s1:/*,mb:*,ex0:/


"显示不完整的命令。
"showcmd 要在nocp 后面才有用
"set nocp
"set showcmd

" 命令行高度
"set cmdheight=1


" do not wrap lines
"set nowrap
"添加水平滚动条
"set guioptions+=b

" 显示空格,tab,行尾
set list
set lcs=tab:>-,trail:-


" 断行
set lbr       "不在单词中间断行
set fo+=mB    "打开断行模块对亚洲语言支持


" 使用F8打开Taglist
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=0
"let Tlist_Show_Menu = 1
" 增强检索功能
"set tags=./tags,./../tags,./**/tags

"set guioptions-=T
"set dictionary-=~/.vim/funclist.txt dictionary+=~/.vim/funclist.txt
"set complete-=k complete +=k





"source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
"source $VIMRUNTIME/compiler/php.vim

behave mswin

set nu
set ruler
set history=1000

" PHP 折叠
let php_folding =1
" 缩进
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
"set expandtab
" 使用缩进进行折叠
"set fdm=indent
"set fdc=4

set backspace=indent,eol,start


"set encoding=utf8
" 针对C语言的缩进
"set cindent



syntax on
"set syntax=php

"au GUIEnter * simalt ~x

autocmd BufWritePre,FileWritePre *.html   ks|call LastMod()|'s



" line("$") 统计列数
fun LastMod()
let l = line("$")
    "exe "1," . l . "s/Last modified: .*/Last modified: " . strftime(" %Y %b %d %X") ."/g"
exe "1," . l . "s/?>\n*/?>/g"
endfun

colorscheme koehler

"autocmd FileType c set ofu=ccomplete#Complete
"autocmd FileType php set ofu=phpcomplete#CompletePHP
"autocmd FileType python set ofu=pythoncomplete#Complete
"autocmd FileType javascript set ofu=javascriptcomplete#CompleteJS
"autocmd FileType html set ofu=htmlcomplete#CompleteTags
"autocmd FileType css set ofu=csscomplete#CompleteCSS
"autocmd FileType xml set ofu=xmlcomplete#CompleteTags

"配置Vim的智能补全, 即所谓的Omni Completion
"fun! OmniComplete()
" let left = strpart(getline('.'), col('.') - 2, 1)
" if left =~ "^$"
" return ""
" elseif left =~ ' $'
" return ""
" else
" return "\<C-x>\<C-o>"
" endfun
" inoremap <silent> <S-Tab> <C-R>=OmniComplete()<CR>



"配置Tab键来智能补全tags:
fun! KeywordComplete()
let left = strpart(getline('.'), col('.') - 2, 1)
if left =~ "^\t*$"
return "\<Tab>"
elseif left =~ ' $'
return "\<Tab>"
else
return "\<C-N>"
endfun
inoremap <silent> <Tab> <C-R>=KeywordComplete()<CR>

#4


这个我试了一下。 不但 utf-8 ,就是 gb13010 ,gb2312 都会在文件末尾加一个换行符。

#5


本来加了一个操作,在文件保存时去掉最后的\n ,可能也没写对,不起作用。真实后来想想,这个是在写入的时候加的。就算在写入前对这缓冲区的文件处理,在写入到文件时还是会加一个换行。

autocmd BufWritePre,FileWritePre *.html ks|call LastMod()|'s



" line("$") 统计列数
fun LastMod()
let l = line("$")
  "exe "1," . l . "s/Last modified: .*/Last modified: " . strftime(" %Y %b %d %X") ."/g"
exe "1," . l . "s/?>\n*/?>/g"
endfun

#6


set fileformat=dos 或者unix试一下

#7


上面的只是一个 html 做的测试,本打算把文件最后一行的 ?>\n 换成 ?> ,不过这个也根本不起作用。

#8


引用 6 楼 yifanernei 的回复:
set fileformat=dos 或者unix试一下


好的。

#9


set fileformat=dos 也不行。。。。还是会多一个。晕了。

说一下。在 geany 中有一个选项,设置在文件保存时保证文件末尾有一个空行,设置了这个 ,用 geany 保存文件的时候就不会在文件结尾加一个换行了,还有 gedit vim 黙认也是在文件保存时加一个换行。我想 gedit 没有设置的地方,vim 一定可以设置。

#10


set fileformat=mac呢
这种情况应该就是这个选项引起的吧

#11


引用 10 楼 yifanernei 的回复:
set fileformat=mac呢
这种情况应该就是这个选项引起的吧


奇怪了,这个不管设置成 dos unix mac 都不管用呢。

#12


dos  应该是  \r\n
unix 应该是  \n
mac  应该是  \r

是这样的吧

#13


这里有一个文档,我再看http://man.chinaunix.net/newsoft/vi/doc/usr_23.html

#14


是的,你分别用geany和vimx编辑一个文件,然后用二进制查看文件内容中换行符
通过比较应该就能得到需要的fileformat了

#15


这个能修改文件格式,可是我们这边通一用 unix 格式,哎~~~,不过也不能解决保存时会自动增加换行符的问题。

#16


怎么办?还有没有高人来指定一下?

#17


.vimrc 里加入

set binary
set noendofline

#18


引用 17 楼 mymtom 的回复:
.vimrc 里加入
HTML code

set binary
set noendofline

管用吗?

#19


引用 17 楼 mymtom 的回复:
.vimrc 里加入
HTML code

set binary
set noendofline


果然是高人啊。太崇拜了啊。~~~

#20


不过这样的话,中文显不了了。。。。

#21


看到一篇文章说 unix 以行为单位。所以这个 换行也是正常的。是不是我的这个不允许有换行的做法是错误的啊。

#22


引用 21 楼 shengshuai 的回复:
看到一篇文章说 unix 以行为单位。所以这个 换行也是正常的。是不是我的这个不允许有换行的做法是错误的啊。

传统的vi是不会加这个换行的。但是有些gcc的某些版本在需要这个最后的换行,所以VIM默认会加个换行。
"unix 以行为单位"也是一个很好的理由。

由于用gcc的原因,我已经习惯了在文件最后加一个空行。
现在用VIM就发现保存的文本文件的最后有两个空行。

#23


终于找到方法了。特意来分享一下:
autocmd FileType php set bin noeol