aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/options.txt3
-rw-r--r--runtime/doc/vim_diff.txt2
-rw-r--r--runtime/lua/vim/_meta/options.lua3
-rw-r--r--src/nvim/indent.c137
-rw-r--r--src/nvim/option_vars.h1
-rw-r--r--src/nvim/options.lua3
-rw-r--r--test/old/testdir/test_lispindent.vim1
7 files changed, 65 insertions, 85 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 8ba801e6f2..176c8ca3db 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1720,9 +1720,6 @@ A jump table for the options with a short description can be found at |Q_op|.
when it didn't exist when editing it. This is a
protection against a file unexpectedly created by
someone else. Vi didn't complain about this.
- *cpo-p*
- p Vi compatible Lisp indenting. When not present, a
- slightly better algorithm is used.
*cpo-P*
P When included, a ":write" command that appends to a
file will set the file name for the current buffer, if
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 0552689860..77b9ff6864 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -675,7 +675,7 @@ Options:
bioskey (MS-DOS)
conskey (MS-DOS)
*'cp'* *'nocompatible'* *'nocp'* *'compatible'* (Nvim is always "nocompatible".)
- 'cpoptions' (gjkHw<*- and all POSIX flags were removed)
+ 'cpoptions' (gjpkHw<*- and all POSIX flags were removed)
*'cryptmethod'* *'cm'* *'key'* (Vim encryption implementation)
cscopepathcomp
cscopeprg
diff --git a/runtime/lua/vim/_meta/options.lua b/runtime/lua/vim/_meta/options.lua
index 209c27cfd8..46497179ac 100644
--- a/runtime/lua/vim/_meta/options.lua
+++ b/runtime/lua/vim/_meta/options.lua
@@ -1296,9 +1296,6 @@ vim.bo.ci = vim.bo.copyindent
--- when it didn't exist when editing it. This is a
--- protection against a file unexpectedly created by
--- someone else. Vi didn't complain about this.
---- *cpo-p*
---- p Vi compatible Lisp indenting. When not present, a
---- slightly better algorithm is used.
--- *cpo-P*
--- P When included, a ":write" command that appends to a
--- file will set the file name for the current buffer, if
diff --git a/src/nvim/indent.c b/src/nvim/indent.c
index adb609358d..051ff8643d 100644
--- a/src/nvim/indent.c
+++ b/src/nvim/indent.c
@@ -1167,9 +1167,6 @@ int get_lisp_indent(void)
pos_T paren;
int amount;
- // Set vi_lisp to use the vi-compatible method.
- int vi_lisp = (vim_strchr(p_cpo, CPO_LISP) != NULL);
-
pos_T realpos = curwin->w_cursor;
curwin->w_cursor.col = 0;
@@ -1247,36 +1244,74 @@ int get_lisp_indent(void)
char *that = get_cursor_line_ptr();
- if (vi_lisp && (get_indent() == 0)) {
- amount = 2;
+ char *line = that;
+ chartabsize_T cts;
+ init_chartabsize_arg(&cts, curwin, pos->lnum, 0, line, line);
+ while (*cts.cts_ptr != NUL && col > 0) {
+ cts.cts_vcol += lbr_chartabsize_adv(&cts);
+ col--;
+ }
+ amount = cts.cts_vcol;
+ that = cts.cts_ptr;
+ clear_chartabsize_arg(&cts);
+
+ // Some keywords require "body" indenting rules (the
+ // non-standard-lisp ones are Scheme special forms):
+ // (let ((a 1)) instead (let ((a 1))
+ // (...)) of (...))
+ if (((*that == '(') || (*that == '[')) && lisp_match(that + 1)) {
+ amount += 2;
} else {
- char *line = that;
- chartabsize_T cts;
- init_chartabsize_arg(&cts, curwin, pos->lnum, 0, line, line);
- while (*cts.cts_ptr != NUL && col > 0) {
- cts.cts_vcol += lbr_chartabsize_adv(&cts);
- col--;
+ if (*that != NUL) {
+ that++;
+ amount++;
+ }
+ colnr_T firsttry = amount;
+
+ init_chartabsize_arg(&cts, curwin, (colnr_T)(that - line),
+ amount, line, that);
+ while (ascii_iswhite(*cts.cts_ptr)) {
+ cts.cts_vcol += lbr_chartabsize(&cts);
+ cts.cts_ptr++;
}
- amount = cts.cts_vcol;
that = cts.cts_ptr;
+ amount = cts.cts_vcol;
clear_chartabsize_arg(&cts);
- // Some keywords require "body" indenting rules (the
- // non-standard-lisp ones are Scheme special forms):
- // (let ((a 1)) instead (let ((a 1))
- // (...)) of (...))
- if (!vi_lisp && ((*that == '(') || (*that == '['))
- && lisp_match(that + 1)) {
- amount += 2;
- } else {
- if (*that != NUL) {
- that++;
- amount++;
+ if (*that && (*that != ';')) {
+ // Not a comment line.
+ // Test *that != '(' to accommodate first let/do
+ // argument if it is more than one line.
+ if ((*that != '(') && (*that != '[')) {
+ firsttry++;
+ }
+
+ parencount = 0;
+
+ init_chartabsize_arg(&cts, curwin,
+ (colnr_T)(that - line), amount, line, that);
+ if (((*that != '"') && (*that != '\'') && (*that != '#')
+ && (((uint8_t)(*that) < '0') || ((uint8_t)(*that) > '9')))) {
+ int quotecount = 0;
+ while (*cts.cts_ptr
+ && (!ascii_iswhite(*cts.cts_ptr) || quotecount || parencount)) {
+ if (*cts.cts_ptr == '"') {
+ quotecount = !quotecount;
+ }
+ if (((*cts.cts_ptr == '(') || (*cts.cts_ptr == '[')) && !quotecount) {
+ parencount++;
+ }
+ if (((*cts.cts_ptr == ')') || (*cts.cts_ptr == ']')) && !quotecount) {
+ parencount--;
+ }
+ if ((*cts.cts_ptr == '\\') && (*(cts.cts_ptr + 1) != NUL)) {
+ cts.cts_vcol += lbr_chartabsize_adv(&cts);
+ }
+
+ cts.cts_vcol += lbr_chartabsize_adv(&cts);
+ }
}
- colnr_T firsttry = amount;
- init_chartabsize_arg(&cts, curwin, (colnr_T)(that - line),
- amount, line, that);
while (ascii_iswhite(*cts.cts_ptr)) {
cts.cts_vcol += lbr_chartabsize(&cts);
cts.cts_ptr++;
@@ -1285,54 +1320,8 @@ int get_lisp_indent(void)
amount = cts.cts_vcol;
clear_chartabsize_arg(&cts);
- if (*that && (*that != ';')) {
- // Not a comment line.
- // Test *that != '(' to accommodate first let/do
- // argument if it is more than one line.
- if (!vi_lisp && (*that != '(') && (*that != '[')) {
- firsttry++;
- }
-
- parencount = 0;
-
- init_chartabsize_arg(&cts, curwin,
- (colnr_T)(that - line), amount, line, that);
- if (vi_lisp || ((*that != '"') && (*that != '\'')
- && (*that != '#')
- && (((uint8_t)(*that) < '0') || ((uint8_t)(*that) > '9')))) {
- int quotecount = 0;
- while (*cts.cts_ptr
- && (!ascii_iswhite(*cts.cts_ptr) || quotecount || parencount)
- && (!((*cts.cts_ptr == '(' || *cts.cts_ptr == '[')
- && !quotecount && !parencount && vi_lisp))) {
- if (*cts.cts_ptr == '"') {
- quotecount = !quotecount;
- }
- if (((*cts.cts_ptr == '(') || (*cts.cts_ptr == '[')) && !quotecount) {
- parencount++;
- }
- if (((*cts.cts_ptr == ')') || (*cts.cts_ptr == ']')) && !quotecount) {
- parencount--;
- }
- if ((*cts.cts_ptr == '\\') && (*(cts.cts_ptr + 1) != NUL)) {
- cts.cts_vcol += lbr_chartabsize_adv(&cts);
- }
-
- cts.cts_vcol += lbr_chartabsize_adv(&cts);
- }
- }
-
- while (ascii_iswhite(*cts.cts_ptr)) {
- cts.cts_vcol += lbr_chartabsize(&cts);
- cts.cts_ptr++;
- }
- that = cts.cts_ptr;
- amount = cts.cts_vcol;
- clear_chartabsize_arg(&cts);
-
- if (!*that || (*that == ';')) {
- amount = firsttry;
- }
+ if (!*that || (*that == ';')) {
+ amount = firsttry;
}
}
}
diff --git a/src/nvim/option_vars.h b/src/nvim/option_vars.h
index c3ab034c4c..dbbbfc6632 100644
--- a/src/nvim/option_vars.h
+++ b/src/nvim/option_vars.h
@@ -151,7 +151,6 @@
#define CPO_NUMCOL 'n' // 'number' column also used for text
#define CPO_LINEOFF 'o'
#define CPO_OVERNEW 'O' // silently overwrite new file
-#define CPO_LISP 'p' // 'lisp' indenting
#define CPO_FNAMEAPP 'P' // set file name for ":w >>file"
#define CPO_JOINCOL 'q' // with "3J" use column after first join
#define CPO_REDO 'r'
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 8295483954..a997a41b77 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -1709,9 +1709,6 @@ return {
when it didn't exist when editing it. This is a
protection against a file unexpectedly created by
someone else. Vi didn't complain about this.
- *cpo-p*
- p Vi compatible Lisp indenting. When not present, a
- slightly better algorithm is used.
*cpo-P*
P When included, a ":write" command that appends to a
file will set the file name for the current buffer, if
diff --git a/test/old/testdir/test_lispindent.vim b/test/old/testdir/test_lispindent.vim
index 2d6060bba3..76ff4e0fd8 100644
--- a/test/old/testdir/test_lispindent.vim
+++ b/test/old/testdir/test_lispindent.vim
@@ -50,6 +50,7 @@ func Test_lisp_indent()
set lisp
set lispwords&
+ throw 'Skipped: cpo+=p not supported'
let save_copt = &cpoptions
set cpoptions+=p
normal 1G=G