changeset 10696:689e88afdd11 v8.0.0238

patch 8.0.0238: bracketed paste does not disable autoindent commit https://github.com/vim/vim/commit/9e817c8a31232eda57963215eb16ee5b1ceefa7b Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jan 25 21:36:17 2017 +0100 patch 8.0.0238: bracketed paste does not disable autoindent Problem: When using bracketed paste autoindent causes indent to be increased. Solution: Disable 'ai' and set 'paste' temporarily. (Ken Takata)
author Christian Brabandt <cb@256bit.org>
date Wed, 25 Jan 2017 21:45:04 +0100
parents 992b0ca524a9
children dd94be1cf394
files src/edit.c src/testdir/test_paste.vim src/version.c
diffstat 3 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/edit.c
+++ b/src/edit.c
@@ -9463,12 +9463,17 @@ bracketed_paste(paste_mode_T mode, int d
     char_u	*end = find_termcode((char_u *)"PE");
     int		ret_char = -1;
     int		save_allow_keys = allow_keys;
+    int		save_paste = p_paste;
+    int		save_ai = curbuf->b_p_ai;
 
     /* If the end code is too long we can't detect it, read everything. */
     if (STRLEN(end) >= NUMBUFLEN)
 	end = NULL;
     ++no_mapping;
     allow_keys = 0;
+    p_paste = TRUE;
+    curbuf->b_p_ai = FALSE;
+
     for (;;)
     {
 	/* When the end is not defined read everything. */
@@ -9534,8 +9539,11 @@ bracketed_paste(paste_mode_T mode, int d
 	}
 	idx = 0;
     }
+
     --no_mapping;
     allow_keys = save_allow_keys;
+    p_paste = save_paste;
+    curbuf->b_p_ai = save_ai;
 
     return ret_char;
 }
--- a/src/testdir/test_paste.vim
+++ b/src/testdir/test_paste.vim
@@ -35,6 +35,16 @@ func Test_paste_insert_mode()
   call assert_equal('bar donfoo', getline(3))
   call assert_equal('bar doneeb', getline(4))
   call assert_equal('c', getline(5))
+
+  set ai et tw=10
+  call setline(1, ['a', '    b', 'c'])
+  2
+  call feedkeys("A\<Esc>[200~foo\<CR> bar bar bar\<Esc>[201~\<Esc>", 'xt')
+  call assert_equal('    bfoo', getline(2))
+  call assert_equal(' bar bar bar', getline(3))
+  call assert_equal('c', getline(4))
+
+  set ai& et& tw=0
   bwipe!
 endfunc
 
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    238,
+/**/
     237,
 /**/
     236,