Есть ли какой-либо метод или плагин, который реализует разделить длинные предложения в двойных кавычках? - PullRequest
0 голосов
/ 04 июля 2018

Предположим, что у нас есть длинные строки в кодах.

strs = "Small is beautiful. Make each program do one thing well. Build a prototype as soon as possible. Choose portability over efficiency. Store data in flat text files. Use software leverage to your advantage.Use shell scripts to increase leverage and portability.Avoid captive user interfaces.Make every program a filter.";

И я хочу разделить предложения выше для читабельности.

strs = "Small is beautiful." +
       "Make each program do one thing well." +
       "Build a prototype as soon as possible." + 
       "Choose portability over efficiency." +
       "Store data in flat text files." +
       "Use software leverage to your advantage." +
       "Use shell scripts to increase leverage and portability." +
       "Avoid captive user interfaces.Make every program a filter." 

Есть ли способ реализовать это естественно? Это скучное повторяющееся задание.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Это не полностью автоматизированное решение, но схема проста и может быть адаптирована для многих подобных случаев:

" 1. Search
/\.\s*                  " find all sentence ends and go to the first of them

" 2. Start recording
qa                      " start recording macro a

" 3. Edit
dw                      " delete till begin of sentence
i                       " insert mode
." +<CR><TAB><ESC>      " insert ." +<CR><TAB> and return to normal mode

" 4. Goto next occurrence
n                       " goto next sentence

" 5. End recording
q                       " end of macro recording

" 6. Repeat
@a                      " repeat macro 1 time
3@a                     " repeat macro 3 times (or replace 3 with a bigger number)

или, может быть, проще набрать и запомнить:

" 1. Search
/\.\s*                  " find all sentence ends and go to the first of them

" 2. Edit
caw                     " delete till begin of sentence and switch to insert mode
." +<CR><TAB><ESC>      " insert ." +<CR><TAB> and return to normal mode

" 3. Goto next occurrence and repeat the last change
n.                      " goto next sentence and repeat the last change
" Repeat 3. as many times as needed
0 голосов
/ 04 июля 2018

По сути, все, что вам нужно сделать, это вставить " +\n" после каждый период, за которым не следует цитата (для защиты последний). Это легко сделать в одной команде, учитывая, что курсор находится на этой строке:

:s/\v\.\s*"@!\zs/" +\r"/g

Обратите внимание, что эта команда также сохранит ваши случайные пробелы после периода. В вашем вопросе вы полностью убрал их. Неясно, является ли это желательно или нет, но, похоже, изменить окончательный результат строка.

Одна проблема в том, что эта команда не заботится о отступы. Конечно, это может быть легко решено с помощью нескольких стандартные ручные команды. Однако это также возможно сделать это в команде :s с использованием следующей стратегии:

  • Получить строку, над которой в данный момент работает, с getline('.')
  • Сопоставить содержимое перед первой цитатой с matchstr(<line>, '[^"]*')
  • Получите длину совпадения, используя strlen(<match>)
  • Повторите пробел для этой длины с repeat(' ', <length>)
  • Вставьте эти пробелы перед последним " в более раннем " +\r" замена

Все в одном (длинное):

:s/\v\.\s*"@!\zs/\="\" +\n".repeat(' ',strlen(matchstr(getline('.'),'[^"]*'))).'"'/g
0 голосов
/ 04 июля 2018

Не тривиально, наверное. Скучно и повторяется? Используем ли мы один и тот же редактор? :)

f"s<CR><Esc>                    " Find the quote, replace with newline
$,C<CR><Esc>                    " remove the last quote so it's not in the way
km'                             " go down to the first line and set a jump mark
:s/\. \?/&<C-V><Enter>/g<CR>    " split into sentences
kV''                            " select all the sentences by jumping to our mark
:s/.*/"&" +/<CR>                " surround them with quotes, add the plus sign
$xx                             " the last one won't need a plus sign
gv>.                            " select the sentences again, and indent them twice
kJ                              " join the variable declaration

Это довольно четко определенный ряд действий, которые вы можете сохранить в макросе (например, qz, чтобы начать запись, q, чтобы остановить запись), а затем воспроизвести в любом другом месте, которое требует такой же обработки ( @z).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...