Сделайте {и} проигнорируйте строки, содержащие только пробел

Выезд Apache Commons CSV

Apache Общий CSV.

Эта библиотека чтения и записи несколько изменений CSV, включая стандартный RFC 4180 . Также чтения/записи разграниченный Вкладкой файлы.

  • MySQL
  • Excel
  • Oracle InformixUnload
  • InformixUnloadCsv
  • PostgreSQLCsv
  • PostgreSQLText
  • RFC4180
  • TDF

16
задан meagar 5 May 2010 в 23:45
поделиться

4 ответа

Команды {и} перемещаются по «абзацу», а в документации vim (см. : параграф справки ) говорится:

Обратите внимание, что пустая строка (только содержащий пробел) НЕ является граница абзаца.

Таким образом, единственный способ сделать это - переназначить {и}. Что-то вроде:

nmap { ?^\\s*$<CR>
nmap } /^\\s*$<CR>

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

1
ответ дан 30 November 2019 в 23:05
поделиться

I never have a legitimate need for whitespace only lines so I solved this "problem" by adding the following to my .vimrc:

" Highlight spaces at the end of lines.
highlight link localWhitespaceError Error
au Syntax * syn match localWhitespaceError /\(\zs\%#\|\s\)\+$/ display

" Remove end of line white space.
noremap <Leader>r ma:%s/\s\+$//e<CR>`a

So then if { and } skips whitespace only lines I use my mapping to remove it and try again.

0
ответ дан 30 November 2019 в 23:05
поделиться

Это то, что беспокоит меня уже долгое время. Вероятно, "правильным" решением было бы написать патч к самому vim, который позволил бы вам настраивать границы абзацев с помощью regex (как :set paragraphs, но на самом деле полезно).

Тем временем я сделал функцию и пару связок, которые почти делают то, что нужно:

function! ParagraphMove(delta, visual)
    normal m'
    normal |
    if a:visual
        normal gv
    endif

    if a:delta > 0
        " first whitespace-only line following a non-whitespace character
        let pos1 = search("\\S", "W")
        let pos2 = search("^\\s*$", "W")
        if pos1 == 0 || pos2 == 0
            let pos = search("\\%$", "W")
        endif
    elseif a:delta < 0
        " first whitespace-only line preceding a non-whitespace character
        let pos1 = search("\\S", "bW")
        let pos2 = search("^\\s*$", "bW")
        if pos1 == 0 || pos2 == 0
            let pos = search("\\%^", "bW")
        endif
    endif
    normal |
endfunction

nnoremap <silent> } :call ParagraphMove( 1, 0)<CR>
onoremap <silent> } :call ParagraphMove( 1, 0)<CR>
" vnoremap <silent> } :call ParagraphMove( 1, 1)<CR>
nnoremap <silent> { :call ParagraphMove(-1, 0)<CR>
onoremap <silent> { :call ParagraphMove(-1, 0)<CR>
" vnoremap <silent> { :call ParagraphMove(-1, 1)<CR>

Это не совсем корректно обрабатывает такие подсчёты, как '4}' или визуальный режим (не комментируйте строки vnoremap на свой страх и риск), но, кажется, нормально для таких вещей, как не сбивание текущего шаблона поиска и отсутствие мерцания. Также, 'd}', 'y}' и т.д., кажется, работают нормально. Если у кого-то есть идеи, как заставить графы работать или исправить визуальный режим, пожалуйста, дайте мне знать.

2
ответ дан 30 November 2019 в 23:05
поделиться

Вот модифицированная версия, которая правильно обрабатывает подсчеты:

function! ParagraphMove(delta, visual, count)
    normal m'
    normal |
    if a:visual
        normal gv
    endif

    if a:count == 0
        let limit = 1
    else
        let limit = a:count
    endif

    let i = 0
    while i < limit
        if a:delta > 0
            " first whitespace-only line following a non-whitespace character           
            let pos1 = search("\\S", "W")
            let pos2 = search("^\\s*$", "W")
            if pos1 == 0 || pos2 == 0
                let pos = search("\\%$", "W")
            endif
        elseif a:delta < 0
            " first whitespace-only line preceding a non-whitespace character           
            let pos1 = search("\\S", "bW")
            let pos2 = search("^\\s*$", "bW")
            if pos1 == 0 || pos2 == 0
                let pos = search("\\%^", "bW")
            endif
        endif
        let i += 1
    endwhile
    normal |
endfunction

nnoremap <silent> } :<C-U>call ParagraphMove( 1, 0, v:count)<CR>
onoremap <silent> } :<C-U>call ParagraphMove( 1, 0, v:count)<CR>
" vnoremap <silent> } :<C-U>call ParagraphMove( 1, 1)<CR>
nnoremap <silent> { :<C-U>call ParagraphMove(-1, 0, v:count)<CR>
onoremap <silent> { :<C-U>call ParagraphMove(-1, 0, v:count)<CR>
" vnoremap <silent> { :<C-U>call ParagraphMove(-1, 1)<CR>
6
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: