mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #3443 'vim-patch:7.4.{785,795,898}'
This commit is contained in:
commit
aca51f3d93
@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 7.4. Last change: 2014 Dec 17
|
||||
*options.txt* For Vim version 7.4. Last change: 2015 Oct 15
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -2178,15 +2178,16 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
'endofline' 'eol' boolean (default on)
|
||||
local to buffer
|
||||
When writing a file and this option is off and the 'binary' option
|
||||
is on, no <EOL> will be written for the last line in the file. This
|
||||
option is automatically set when starting to edit a new file, unless
|
||||
the file does not have an <EOL> for the last line in the file, in
|
||||
which case it is reset. Normally you don't have to set or reset this
|
||||
option. When 'binary' is off the value is not used when writing the
|
||||
file. When 'binary' is on it is used to remember the presence of a
|
||||
<EOL> for the last line in the file, so that when you write the file
|
||||
the situation from the original file can be kept. But you can change
|
||||
it if you want to.
|
||||
is on, or 'fixeol' option is off, no <EOL> will be written for the
|
||||
last line in the file. This option is automatically set or reset when
|
||||
starting to edit a new file, depending on whether file has an <EOL>
|
||||
for the last line in the file. Normally you don't have to set or
|
||||
reset this option.
|
||||
When 'binary' is off and 'fixeol' is on the value is not used when
|
||||
writing the file. When 'binary' is on or 'fixeol' is off it is used
|
||||
to remember the presence of a <EOL> for the last line in the file, so
|
||||
that when you write the file the situation from the original file can
|
||||
be kept. But you can change it if you want to.
|
||||
|
||||
*'equalalways'* *'ea'* *'noequalalways'* *'noea'*
|
||||
'equalalways' 'ea' boolean (default on)
|
||||
@ -2541,6 +2542,17 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
fold:c Folded |hl-Folded|
|
||||
diff:c DiffDelete |hl-DiffDelete|
|
||||
|
||||
*'fixendofline'* *'fixeol'* *'nofixendofline'* *'nofixeol'*
|
||||
'fixendofline' 'fixeol' boolean (default on)
|
||||
local to buffer
|
||||
{not in Vi}
|
||||
When writing a file and this option is on, <EOL> at the end of file
|
||||
will be restored if missing. Turn this option off if you want to
|
||||
preserve the situation from the original file.
|
||||
When the 'binary' option is set the value of this option doesn't
|
||||
matter.
|
||||
See the 'endofline' option.
|
||||
|
||||
*'fkmap'* *'fk'* *'nofkmap'* *'nofk'*
|
||||
'fkmap' 'fk' boolean (default off) *E198*
|
||||
global
|
||||
|
@ -926,6 +926,9 @@ call <SID>BinOptionL("bin")
|
||||
call append("$", "endofline\tlast line in the file has an end-of-line")
|
||||
call append("$", "\t(local to buffer)")
|
||||
call <SID>BinOptionL("eol")
|
||||
call append("$", "fixeol\tfixes missing end-of-line at end of text file")
|
||||
call append("$", "\t(local to buffer)")
|
||||
call <SID>BinOptionL("fixeol")
|
||||
if has("multi_byte")
|
||||
call append("$", "bomb\tprepend a Byte Order Mark to the file")
|
||||
call append("$", "\t(local to buffer)")
|
||||
|
@ -612,6 +612,7 @@ struct file_buffer {
|
||||
char_u *b_p_cfu; /* 'completefunc' */
|
||||
char_u *b_p_ofu; /* 'omnifunc' */
|
||||
int b_p_eol; /* 'endofline' */
|
||||
int b_p_fixeol; /* 'fixendofline' */
|
||||
int b_p_et; /* 'expandtab' */
|
||||
int b_p_et_nobin; /* b_p_et saved for binary mode */
|
||||
char_u *b_p_fenc; /* 'fileencoding' */
|
||||
|
@ -1922,10 +1922,10 @@ failed:
|
||||
check_marks_read();
|
||||
|
||||
/*
|
||||
* Trick: We remember if the last line of the read didn't have
|
||||
* an eol even when 'binary' is off, for when writing it again with
|
||||
* 'binary' on. This is required for
|
||||
* ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
|
||||
* We remember if the last line of the read didn't have
|
||||
* an eol even when 'binary' is off, to support turning 'fixeol' off,
|
||||
* or writing the read again with 'binary' on. The latter is required
|
||||
* for ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
|
||||
*/
|
||||
curbuf->b_no_eol_lnum = read_no_eol_lnum;
|
||||
|
||||
@ -3310,7 +3310,7 @@ restore_backup:
|
||||
/* write failed or last line has no EOL: stop here */
|
||||
if (end == 0
|
||||
|| (lnum == end
|
||||
&& write_bin
|
||||
&& (write_bin || !buf->b_p_fixeol)
|
||||
&& (lnum == buf->b_no_eol_lnum
|
||||
|| (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol)))) {
|
||||
++lnum; /* written the line, count it */
|
||||
|
@ -3954,8 +3954,10 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp)
|
||||
if (ffdos)
|
||||
size += lnum - 1;
|
||||
|
||||
/* Don't count the last line break if 'bin' and 'noeol'. */
|
||||
if (buf->b_p_bin && !buf->b_p_eol && buf->b_ml.ml_line_count == lnum) {
|
||||
/* Don't count the last line break if 'noeol' and ('bin' or
|
||||
* 'nofixeol'). */
|
||||
if ((!buf->b_p_fixeol || buf->b_p_bin) && !buf->b_p_eol
|
||||
&& buf->b_ml.ml_line_count == lnum) {
|
||||
size -= ffdos + 1;
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ typedef struct memline {
|
||||
int ml_flags;
|
||||
|
||||
infoptr_T *ml_stack; /* stack of pointer blocks (array of IPTRs) */
|
||||
int ml_stack_top; /* current top if ml_stack */
|
||||
int ml_stack_top; /* current top of ml_stack */
|
||||
int ml_stack_size; /* total number of entries in ml_stack */
|
||||
|
||||
linenr_T ml_line_lnum; /* line number of cached line, 0 if not valid */
|
||||
|
@ -4964,7 +4964,7 @@ void cursor_pos_info(void)
|
||||
&char_count_cursor, len, eol_size);
|
||||
if (lnum == curbuf->b_ml.ml_line_count
|
||||
&& !curbuf->b_p_eol
|
||||
&& curbuf->b_p_bin
|
||||
&& (curbuf->b_p_bin || !curbuf->b_p_fixeol)
|
||||
&& (long)STRLEN(s) < len)
|
||||
byte_count_cursor -= eol_size;
|
||||
}
|
||||
@ -4985,7 +4985,7 @@ void cursor_pos_info(void)
|
||||
}
|
||||
|
||||
/* Correction for when last line doesn't have an EOL. */
|
||||
if (!curbuf->b_p_eol && curbuf->b_p_bin)
|
||||
if (!curbuf->b_p_eol && (curbuf->b_p_bin || !curbuf->b_p_fixeol))
|
||||
byte_count -= eol_size;
|
||||
|
||||
if (l_VIsual_active) {
|
||||
|
@ -122,6 +122,7 @@ static char_u *p_cpt;
|
||||
static char_u *p_cfu;
|
||||
static char_u *p_ofu;
|
||||
static int p_eol;
|
||||
static int p_fixeol;
|
||||
static int p_et;
|
||||
static char_u *p_fenc;
|
||||
static char_u *p_ff;
|
||||
@ -3592,6 +3593,9 @@ set_bool_option (
|
||||
/* when 'endofline' is changed, redraw the window title */
|
||||
else if ((int *)varp == &curbuf->b_p_eol) {
|
||||
redraw_titles();
|
||||
} else if ((int *)varp == &curbuf->b_p_fixeol) {
|
||||
// when 'fixeol' is changed, redraw the window title
|
||||
redraw_titles();
|
||||
}
|
||||
/* when 'bomb' is changed, redraw the window title and tab page text */
|
||||
else if ((int *)varp == &curbuf->b_p_bomb) {
|
||||
@ -5304,6 +5308,7 @@ static char_u *get_varp(vimoption_T *p)
|
||||
case PV_CFU: return (char_u *)&(curbuf->b_p_cfu);
|
||||
case PV_OFU: return (char_u *)&(curbuf->b_p_ofu);
|
||||
case PV_EOL: return (char_u *)&(curbuf->b_p_eol);
|
||||
case PV_FIXEOL: return (char_u *)&(curbuf->b_p_fixeol);
|
||||
case PV_ET: return (char_u *)&(curbuf->b_p_et);
|
||||
case PV_FENC: return (char_u *)&(curbuf->b_p_fenc);
|
||||
case PV_FF: return (char_u *)&(curbuf->b_p_ff);
|
||||
@ -5548,6 +5553,7 @@ void buf_copy_options(buf_T *buf, int flags)
|
||||
buf->b_p_bin = p_bin;
|
||||
buf->b_p_bomb = p_bomb;
|
||||
buf->b_p_et = p_et;
|
||||
buf->b_p_fixeol = p_fixeol;
|
||||
buf->b_p_et_nobin = p_et_nobin;
|
||||
buf->b_p_ml = p_ml;
|
||||
buf->b_p_ml_nobin = p_ml_nobin;
|
||||
@ -6483,6 +6489,7 @@ void save_file_ff(buf_T *buf)
|
||||
* from when editing started (save_file_ff() called).
|
||||
* Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
|
||||
* changed and 'binary' is not set.
|
||||
* Also when 'endofline' was changed and 'fixeol' is not set.
|
||||
* When "ignore_empty" is true don't consider a new, empty buffer to be
|
||||
* changed.
|
||||
*/
|
||||
@ -6497,9 +6504,9 @@ bool file_ff_differs(buf_T *buf, bool ignore_empty)
|
||||
&& *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
|
||||
return FALSE;
|
||||
if (buf->b_start_ffc != *buf->b_p_ff)
|
||||
return TRUE;
|
||||
if (buf->b_p_bin && buf->b_start_eol != buf->b_p_eol)
|
||||
return TRUE;
|
||||
return true;
|
||||
if ((buf->b_p_bin || !buf->b_p_fixeol) && buf->b_start_eol != buf->b_p_eol)
|
||||
return true;
|
||||
if (!buf->b_p_bin && buf->b_start_bomb != buf->b_p_bomb)
|
||||
return TRUE;
|
||||
if (buf->b_start_fenc == NULL)
|
||||
|
@ -665,6 +665,7 @@ enum {
|
||||
, BV_DEF
|
||||
, BV_INC
|
||||
, BV_EOL
|
||||
, BV_FIXEOL
|
||||
, BV_EP
|
||||
, BV_ET
|
||||
, BV_FENC
|
||||
|
@ -798,6 +798,14 @@ return {
|
||||
varname='p_fcs',
|
||||
defaults={if_true={vi="vert:|,fold:-"}}
|
||||
},
|
||||
{
|
||||
full_name='fixendofline', abbreviation='fixeol',
|
||||
type='bool', scope={'buffer'},
|
||||
vi_def=true,
|
||||
redraw={'statuslines'},
|
||||
varname='p_fixeol',
|
||||
defaults={if_true={vi=true}}
|
||||
},
|
||||
{
|
||||
full_name='fkmap', abbreviation='fk',
|
||||
type='bool', scope={'global'},
|
||||
|
@ -418,7 +418,8 @@ static void read_input(DynamicBuffer *buf)
|
||||
// Finished a line, add a NL, unless this line should not have one.
|
||||
// FIXME need to make this more readable
|
||||
if (lnum != curbuf->b_op_end.lnum
|
||||
|| !curbuf->b_p_bin
|
||||
|| (!curbuf->b_p_bin
|
||||
&& curbuf->b_p_fixeol)
|
||||
|| (lnum != curbuf->b_no_eol_lnum
|
||||
&& (lnum !=
|
||||
curbuf->b_ml.ml_line_count
|
||||
|
@ -98,7 +98,7 @@ static int included_patches[] = {
|
||||
// 901,
|
||||
// 900 NA
|
||||
// 899 NA
|
||||
// 898,
|
||||
898,
|
||||
// 897,
|
||||
// 896,
|
||||
// 895,
|
||||
@ -201,7 +201,7 @@ static int included_patches[] = {
|
||||
// 798,
|
||||
// 797,
|
||||
// 796 NA
|
||||
// 795,
|
||||
795,
|
||||
// 794 NA
|
||||
793,
|
||||
// 792,
|
||||
@ -211,7 +211,7 @@ static int included_patches[] = {
|
||||
// 788 NA
|
||||
787,
|
||||
786,
|
||||
// 785,
|
||||
785,
|
||||
784,
|
||||
// 783 NA
|
||||
// 782,
|
||||
|
59
test/functional/legacy/fixeol_spec.lua
Normal file
59
test/functional/legacy/fixeol_spec.lua
Normal file
@ -0,0 +1,59 @@
|
||||
-- Tests for 'fixeol'
|
||||
|
||||
local helpers = require('test.functional.helpers')
|
||||
local feed, insert, source = helpers.feed, helpers.insert, helpers.source
|
||||
local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
|
||||
|
||||
describe('fixeol', function()
|
||||
setup(clear)
|
||||
|
||||
it('is working', function()
|
||||
-- First write two test files – with and without trailing EOL.
|
||||
-- Use Unix fileformat for consistency.
|
||||
execute('set ff=unix')
|
||||
execute('enew!')
|
||||
feed('awith eol<esc>:w! XXEol<cr>')
|
||||
execute('enew!')
|
||||
execute('set noeol nofixeol')
|
||||
feed('awithout eol<esc>:w! XXNoEol<cr>')
|
||||
execute('set eol fixeol')
|
||||
execute('bwipe XXEol XXNoEol')
|
||||
|
||||
-- Try editing files with 'fixeol' disabled.
|
||||
execute('e! XXEol')
|
||||
feed('ostays eol<esc>:set nofixeol<cr>')
|
||||
execute('w! XXTestEol')
|
||||
execute('e! XXNoEol')
|
||||
feed('ostays without<esc>:set nofixeol<cr>')
|
||||
execute('w! XXTestNoEol')
|
||||
execute('bwipe XXEol XXNoEol XXTestEol XXTestNoEol')
|
||||
execute('set fixeol')
|
||||
|
||||
-- Append "END" to each file so that we can see what the last written char was.
|
||||
feed('ggdGaEND<esc>:w >>XXEol<cr>')
|
||||
execute('w >>XXNoEol')
|
||||
execute('w >>XXTestEol')
|
||||
execute('w >>XXTestNoEol')
|
||||
|
||||
-- Concatenate the results.
|
||||
execute('e! test.out')
|
||||
feed('a0<esc>:$r XXEol<cr>')
|
||||
execute('$r XXNoEol')
|
||||
feed('Go1<esc>:$r XXTestEol<cr>')
|
||||
execute('$r XXTestNoEol')
|
||||
execute('w')
|
||||
|
||||
-- Assert buffer contents.
|
||||
expect([=[
|
||||
0
|
||||
with eol
|
||||
END
|
||||
without eolEND
|
||||
1
|
||||
with eol
|
||||
stays eol
|
||||
END
|
||||
without eol
|
||||
stays withoutEND]=])
|
||||
end)
|
||||
end)
|
Loading…
Reference in New Issue
Block a user