Patch 8.1.0728
Problem: Cannot avoid breaking after a single space.
Solution: Add the 'p' flag to 'formatoptions'. (Tom Ryder)
Files: runtime/doc/change.txt, src/edit.c, src/option.h,
src/testdir/test_textformat.vim
*** ../vim-8.1.0727/runtime/doc/change.txt 2018-11-22 03:07:30.940596247
+0100
--- runtime/doc/change.txt 2019-01-11 21:16:00.361692960 +0100
***************
*** 1716,1721 ****
--- 1720,1736 ----
// in the list ~
Becomes:
int i; // the index in the list ~
+ p Don't break lines at single spaces that follow periods. This is
+ intended to complement 'joinspaces' and |cpo-J|, for prose with
+ sentences separated by two spaces. For example, with 'textwidth' set
+ to 28: >
+ Surely you're joking, Mr. Feynman!
+ < Becomes: >
+ Surely you're joking,
+ Mr. Feynman!
+ < Instead of: >
+ Surely you're joking, Mr.
+ Feynman!
With 't' and 'c' you can specify when Vim performs auto-wrapping:
*** ../vim-8.1.0727/src/edit.c 2019-01-11 20:34:18.296314730 +0100
--- src/edit.c 2019-01-11 21:20:05.523988403 +0100
***************
*** 6498,6503 ****
--- 6498,6504 ----
char_u *saved_text = NULL;
colnr_T col;
colnr_T end_col;
+ int wcc; // counter for whitespace chars
virtcol = get_nolist_virtcol()
+ char2cells(c != NUL ? c : gchar_cursor());
***************
*** 6559,6572 ****
/* remember position of blank just before text */
end_col = curwin->w_cursor.col;
! /* find start of sequence of blanks */
while (curwin->w_cursor.col > 0 && WHITECHAR(cc))
{
dec_cursor();
cc = gchar_cursor();
}
if (curwin->w_cursor.col == 0 && WHITECHAR(cc))
break; /* only spaces in front of text */
#ifdef FEAT_COMMENTS
/* Don't break until after the comment leader */
if (curwin->w_cursor.col < leader_len)
--- 6560,6585 ----
/* remember position of blank just before text */
end_col = curwin->w_cursor.col;
! // find start of sequence of blanks
! wcc = 0;
while (curwin->w_cursor.col > 0 && WHITECHAR(cc))
{
dec_cursor();
cc = gchar_cursor();
+
+ // Increment count of how many whitespace chars in this
+ // group; we only need to know if it's more than one.
+ if (wcc < 2)
+ wcc++;
}
if (curwin->w_cursor.col == 0 && WHITECHAR(cc))
break; /* only spaces in front of text */
+
+ // Don't break after a period when 'formatoptions' has 'p' and
+ // there are less than two spaces.
+ if (has_format_option(FO_PERIOD_ABBR) && cc == '.' && wcc < 2)
+ continue;
+
#ifdef FEAT_COMMENTS
/* Don't break until after the comment leader */
if (curwin->w_cursor.col < leader_len)
*** ../vim-8.1.0727/src/option.h 2018-12-03 20:49:58.767291066 +0100
--- src/option.h 2019-01-11 21:16:00.365692934 +0100
***************
*** 101,110 ****
#define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
#define FO_AUTO 'a' /* automatic formatting */
#define FO_REMOVE_COMS 'j' /* remove comment leaders when joining
lines */
#define DFLT_FO_VI "vt"
#define DFLT_FO_VIM "tcq"
! #define FO_ALL "tcroq2vlb1mMBn,awj" /* for do_set() */
/* characters for the p_cpo option: */
#define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
--- 101,111 ----
#define FO_WHITE_PAR 'w' /* trailing white space continues paragr. */
#define FO_AUTO 'a' /* automatic formatting */
#define FO_REMOVE_COMS 'j' /* remove comment leaders when joining
lines */
+ #define FO_PERIOD_ABBR 'p' /* don't break a single space after a
period */
#define DFLT_FO_VI "vt"
#define DFLT_FO_VIM "tcq"
! #define FO_ALL "tcroq2vlb1mMBn,awjp" /* for do_set() */
/* characters for the p_cpo option: */
#define CPO_ALTREAD 'a' /* ":read" sets alternate file name */
*** ../vim-8.1.0727/src/testdir/test_textformat.vim 2018-12-31
23:58:20.246887218 +0100
--- src/testdir/test_textformat.vim 2019-01-11 21:16:00.365692934 +0100
***************
*** 163,168 ****
--- 163,194 ----
\ '# 1 xxxxx',
\ '# foobar'], getline(1, 2))
+ " Test the 'p' flag for 'formatoptions'
+ " First test without the flag: that it will break "Mr. Feynman" at the space
+ normal ggdG
+ setl tw=28 fo=tcq
+ call setline('.', 'Surely you''re joking, Mr. Feynman!')
+ normal gqq
+ call assert_equal([
+ \ 'Surely you''re joking, Mr.',
+ \ 'Feynman!'], getline(1, 2))
+ " Now test with the flag: that it will push the name with the title onto the
+ " next line
+ normal ggdG
+ setl fo+=p
+ call setline('.', 'Surely you''re joking, Mr. Feynman!')
+ normal gqq
+ call assert_equal([
+ \ 'Surely you''re joking,',
+ \ 'Mr. Feynman!'], getline(1, 2))
+ " Ensure that it will still break if two spaces are entered
+ normal ggdG
+ call setline('.', 'Surely you''re joking, Mr. Feynman!')
+ normal gqq
+ call assert_equal([
+ \ 'Surely you''re joking, Mr.',
+ \ 'Feynman!'], getline(1, 2))
+
setl ai& tw& fo& si& comments&
enew!
endfunc
*** ../vim-8.1.0727/src/version.c 2019-01-11 20:37:07.714787395 +0100
--- src/version.c 2019-01-11 21:17:56.504888657 +0100
***************
*** 797,798 ****
--- 797,800 ----
{ /* Add new patch number below this line */
+ /**/
+ 728,
/**/
--
Microsoft says that MS-Windows is much better for you than Linux.
That's like the Pope saying that catholicism is much better for
you than protestantism.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.