Chuyển động hạt mịn Vim HardMode


11

Gần đây tôi đã tìm hiểu về chế độ cứng Vim và tôi đã quyết định dùng thử. Tuy nhiên, tôi đang gặp một số vấn đề với chuyển động hạt mịn.

Ví dụ: giả sử tôi thực sự chỉ muốn di chuyển lên hoặc xuống một dòng. Vì jkbị vô hiệu hóa, tôi không chắc có những lựa chọn thay thế nào tốt hơn cho việc này.

Tôi đã gặp vấn đề tương tự khi tôi muốn di chuyển một hoặc hai ký tự sang phải hoặc trái. Có ai biết làm thế nào một người sẽ thay thế các loại phong trào?

Đây là plugin tôi đang sử dụng: https://github.com/wikitopian/hardmode .


Thật là một plugin ngu ngốc! Sử dụng bất cứ công việc gì.
romainl

Tôi thực sự đồng ý với romainl: thật tốt khi học cách điều hướng hiệu quả trong một tệp nhưng áp đặt cho chính mình loại plugin này là một nỗi đau không cần thiết. Tuy nhiên, bạn vẫn có thể quan tâm đến câu trả lời của tôi ở đây (chính xác hơn là phần về /?.
statox

1
Tôi tôn trọng không đồng ý với statox và romainl ở đây. Điều hướng trực tiếp đến các mục tiêu bạn muốn thay đổi có thể cải thiện đáng kể hiệu quả tổng thể của bạn. Mặc dù có, điều này có thể làm bạn chậm lại lúc đầu, nhưng về lâu dài bạn sẽ bù đắp thời gian đã mất bằng cách sử dụng các điều hướng tốt hơn.
Archangel33

Trên thực tế @ Archangel33 Tôi nghĩ rằng chúng tôi có cùng quan điểm về thực tế là điều hướng chính xác hơn với các phương pháp khác hơn hjkllà một điều tốt. Điều tôi không đồng ý là chính plugin: Theo tôi, tốt hơn là bạn nên tìm hiểu các cách mới để điều hướng cùng một lúc (bạn không thể học tất cả chúng cùng một lúc) và trong quá trình học sử dụng các plugin khiến bạn thất vọng không phải là cần thiết. Điều đó được nói rằng đó chỉ là ý kiến ​​của tôi: người ta có quyền không đồng ý :-)
statox

1
@Alex Quả thực nhận xét của tôi chỉ là ý kiến ​​cá nhân của tôi, tôi sẽ không bao giờ nghĩ rằng tôi có giải pháp duy nhất và phổ quát đó là lý do tại sao câu cuối cùng của tôi là That being said it is only my opinion: one has right to disagree. Bây giờ, cuộc tranh luận có khả năng vô tận: tất nhiên một số người sẽ được hưởng lợi từ loại plugin này trong khi nó sẽ chỉ làm nản lòng một số người khác và gây hại cho việc học của họ. Nếu bạn muốn nói về nó, tôi sẽ vui lòng thảo luận với bạn trong một cuộc trò chuyện nhưng chúng tôi không nên spam các bình luận của câu hỏi bằng loại tranh luận này :-)
statox

Câu trả lời:


17

Đây chỉ là một vài trong số các phong trào mà vim có khả năng, những điều này sẽ giúp bạn đi ngay bây giờ.

TL; DR

  1. Sử dụng tính năng trợ giúp tích hợp của Vim trên navigationhoặc tốt hơn nữausr_03.txt
  2. Tìm kiếm trên google vim advanced movements
  3. Điều hướng bằng / đến từ
  4. đi đến đây Tất cả các động thái đúng

Sự di chuyển

Có nhiều cách để đi lại trong vim tôi đã liệt kê một số cách mà tôi tìm thấy bằng cách tìm kiếm vim advanced movements, và một số cách mà tôi sử dụng mọi lúc. Tôi chắc chắn bạn biết hầu hết những điều này nhưng những điều tôi nghĩ bạn sẽ muốn chú ý đặc biệt là điều hướng từ.

Dưới đây là một số cho phép điều hướng trong một dòng.

  • 0 - đi đến điểm bắt đầu của dòng hiện tại.
  • ^ - đi đến ký tự không trống đầu tiên của dòng.
  • $ - đi đến cuối dòng hiện tại.
  • g_ - đi đến ký tự không trống cuối cùng của dòng.

Điều hướng với các từ có thể rất hữu ích. Để chi tiết hơn, bạn nên điều hướng liên quan đến các từ, sử dụng:

  • e - đi đến cuối từ hiện tại.
  • E - đi đến cuối của WORD hiện tại.
  • b - đi đến từ trước (trước).
  • B - đi đến WORD trước (trước).
  • w - đi đến từ tiếp theo.
  • W - đi đến WORD tiếp theo.

Một từ bao gồm một chuỗi các chữ cái, chữ số và dấu gạch dưới. Một WORD bao gồm một chuỗi các ký tự không trống, được phân tách bằng khoảng trắng. từ | WORDS cũng có thể thay đổi tùy thuộc vào cài đặt vim của bạn.

Ví dụ để hiển thị sự khác biệt giữa WORD và từ

192.168.1.1 là một WORD duy nhất.

192.168.1.1 là bảy từ.

Các phong trào tìm kiếm cũng có thể cực kỳ hữu ích.

  • /pattern - Tìm kiếm một mẫu mà bạn sẽ đưa bạn đến lần xuất hiện tiếp theo của pattern
    • nsẽ đưa bạn đến trận đấu tiếp theo patternbên dưới con trỏ.
  • ?pattern- Tìm kiếm một mẫu mà bạn sẽ đưa bạn đến lần xuất hiện trước đó pattern.
    • Nsẽ đưa bạn đến trận đấu tiếp theo patternphía trên con trỏ.
  • * - Chuyển đến lần xuất hiện tiếp theo của từ hiện tại dưới con trỏ.
  • # - Chuyển đến sự xuất hiện trước đó của từ hiện tại dưới con trỏ.
  • % - Chuyển đến dấu ngoặc nhọn phù hợp hoặc dấu ngoặc trong mã.

Dưới đây là một số bạn có thể làm ngay cả trước khi mở vim, từ dòng lệnh Vim +N filenamecho phép bạn đi đến dòng thứ N của tệp sau khi mở tệp.

vim +10 /etc/passwd

Vim +/pattern filenamemở tập tin đến dòng đầu tiên với sự xuất hiện của pattern. Trong ví dụ sau, vim sẽ mở tệp README và chuyển đến lần xuất hiện đầu tiên của từ cài đặt từ.

vim +/install README

Vim +?patten filenamemở tập tin đến lần xuất hiện cuối cùng của pattern. Trong ví dụ sau, nó sẽ mở tệp README và chuyển đến lần xuất hiện cuối cùng của từ Lỗi bug.

vim +?bug README


8

Để thay thế cho hardmode, đoạn sau sẽ cho phép bạn sử dụng h, j, k, và lnhư bình thường nhưng tạo ra một tiếng bíp âm thanh để cảnh báo bạn khi chúng được sử dụng trong kế nhanh chóng.

function! s:BeepOnRepeat(key)
    let count1 = v:count1

    if !exists('s:last_time')
        let s:last_time    = reltime()
        let s:repeat_count = 1
    else
        " increment the repeat count if `h`, `j`, `k`, or `l` was pressed
        " within the last second, otherwise reset it
        let now = reltime()
        if str2float(reltimestr(reltime(s:last_time, now))) < 1
            let s:repeat_count += 1
        else
            let s:repeat_count = 1
        endif
        let s:last_time = now

        " produce an audible beep if a sequence of `h`, `j`, `k`, and/or `l`,
        " greater than three, was pressed (within the repeat count time limit)
        if s:repeat_count > 3
            let savebelloff    = &belloff
            let savevisualbell = &visualbell
            let &belloff    = ''
            let &visualbell = 0
            execute "normal! \<Esc>"
            let &belloff    = savebelloff
            let &visualbell = savevisualbell
        endif
    endif

    execute 'normal! ' . count1 . a:key
endfunction

nnoremap <silent> h :<C-u>call <SID>BeepOnRepeat('h')<CR>
nnoremap <silent> j :<C-u>call <SID>BeepOnRepeat('j')<CR>
nnoremap <silent> k :<C-u>call <SID>BeepOnRepeat('k')<CR>
nnoremap <silent> l :<C-u>call <SID>BeepOnRepeat('l')<CR>

Đối với một cách tiếp cận khác để hạn chế hjklsử dụng, xem vim-molasses .


3

Hoặc sử dụng Chế độ trung bình vẫn cố gắng tìm hiểu bạn "di chuyển đúng", nhưng ít nghiêm ngặt hơn khi thực hiện điều đó:

Chế độ trung bình là một plugin Vim giới hạn chuyển động của nhân vật, nhưng không vô hiệu hóa chúng hoàn toàn. Theo mặc định, chế độ trung bình sẽ chỉ cho phép hai chuyển động nhân vật liên tiếp.


1

Tôi đã có vấn đề tương tự sau đó tôi gõ :help hardmodeLo và kìa tôi đã tìm thấy

'g:HardMode_level' If set to 'wannabe' 
arrow keys disabled, but not   hjkl etc.                                                                                              

Nhân tiện, tôi là một trong những người mới bắt đầu vim thấy plugin này cực kỳ hữu ích vì nó thực sự đẩy tôi ra khỏi chuột.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.