Удалить, но не вырезать линию в VIM

Я использую компьютер с двумя внешними последовательными контроллерами для подключения к двум различным системам BMS. Запуск двух проигрывателей vmware на debian weezy с разными операционными системами в каждом и подключение одного последовательного порта к каждой машине vmware! Проблема заключалась в том, что один или оба последовательных порта непредсказуемо не подключались к vmware или отображались так, как будто они использовались другим приложением. После нескольких часов поиска в журнале, смены оборудования и т. д. я заметил в / var / log / syslog modemmanager , который звонит всем ttyS *, пытаясь идентифицировать подключенный модем! {{ 1}} Я удалил его с помощью "apt-get remove modemmanager", и проблема решена! Я считаю, что при попытке найти подключенные устройства порты оставались или устройства, подключенные к портам, не были готовы!

6
24.10.2018, 08:44
2 ответа

Вы ищете регистр черной дыры(:help quote_). Если вы добавите "_к команде удаления, содержимое просто исчезнет. Итак, чтобы удалить и сохранить следующие три слова, а затем избавиться от всей строки, вы должны использовать d3w"_dd.

Расширенное сопоставление

Этот вариант использования сохранения части строки при удалении всей строки является распространенным; Я написал для этого набор отображений :

.
"["x]dDD            Delete the characters under the cursor until the end
"                   of the line and [count]-1 more lines [into register x],
"                   and delete the remainder of the line (i.e. the
"                   characters before the cursor) and possibly following
"                   empty line(s) without affecting a register.
"["x]dD{motion}     Delete text that {motion} moves over [into register x]
"                   and delete the remainder of the line(s) and possibly
"                   following empty line(s) without affecting a register.
"{Visual}["x],dD    Delete the highlighted text [into register x] and delete
"                   the remainder of the selected line(s) and possibly
"                   following empty line(s) without affecting a register.
function! s:DeleteCurrentAndFollowingEmptyLines()
    let l:currentLnum = line('.')
    let l:cnt = 1
    while l:currentLnum + l:cnt < line('$') && getline(l:currentLnum + l:cnt) =~# '^\s*$'
        let l:cnt += 1
    endwhile

    return '"_'. l:cnt. 'dd'
endfunction
nnoremap <expr> <SID>(DeleteCurrentAndFollowingEmptyLines) <SID>DeleteCurrentAndFollowingEmptyLines()
nnoremap <script> dDD D<SID>(DeleteCurrentAndFollowingEmptyLines)
xnoremap <script>,dD d<SID>(DeleteCurrentAndFollowingEmptyLines)
function! s:DeleteCurrentAndFollowingEmptyLinesOperatorExpression()
    set opfunc=DeleteCurrentAndFollowingEmptyLinesOperator
    let l:keys = 'g@'

    if ! &l:modifiable || &l:readonly
        " Probe for "Cannot make changes" error and readonly warning via a no-op
        " dummy modification.
        " In the case of a nomodifiable buffer, Vim will abort the normal mode
        " command chain, discard the g@, and thus not invoke the operatorfunc.
        let l:keys = ":call setline('.', getline('.'))\<CR>". l:keys
    endif

    return l:keys
endfunction
function! DeleteCurrentAndFollowingEmptyLinesOperator( type )
    try
        " Note: Need to use an "inclusive" selection to make `] include the last
        " moved-over character.
        let l:save_selection = &selection
        set selection=inclusive

        execute 'silent normal! g`['. (a:type ==# 'line' ? 'V' : 'v'). 'g`]"'. v:register. 'y'

        execute 'normal!' s:DeleteCurrentAndFollowingEmptyLines()
    finally
        if exists('l:save_selection')
            let &selection = l:save_selection
        endif
    endtry
endfunction
nnoremap <expr> dD <SID>DeleteCurrentAndFollowingEmptyLinesOperatorExpression()
9
27.01.2020, 20:23

вы можете скопировать ту часть, которую хотите использовать, в именованный буфер и вставить оттуда, например:

"ay3w

это скопирует 3 слова в именованный буфер a и

"ap

будет вставлять данные из именованного буфера позже; также вы можете сначала удалить 3 слова, а затем удалить всю строку, а затем вставить с помощью

"2p

это вставит 2-е от последнего удаления из буфера удаления; также следуйте предложениям по комментариям, так как это вопрос с тегом VIM -для этого есть собственное решение VIM (не работает на Vi):

y3w then in new place "0p

VIM имеет встроенную функцию сохранения последней копии в реестре 0.

1
27.01.2020, 20:23

Теги

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