2010-01-10 29 views
14

Tôi có thói quen xấu khi sử dụng phím 'home' để quay lại đầu dòng. Như tôi mới bắt đầu sử dụng vim tôi nhận thấy rằng khi tôi bấm phím nhà trên một lót được thụt vào, nó trả về cho tôi vào đầu của dòng. Trong Notepad ++ (trình soạn thảo mà tôi đã sử dụng) nó sẽ trả lại cho tôi phần đầu của mã trên dòng đó, ngay sau khi thụt lề.Nhấn "Trang chủ" trong Vim trên Đường thụt dòng

Có cách nào để nhân rộng hành vi này trong vim không? Thông thường, khi tôi đang nhấn nhà, nó ở chế độ Chèn cho tôi (thường) dính một biến ở đó.

Tôi có set smartindent trong vimrc của tôi, với set noautoindent như là một trang "mẹo" nói với tôi chắc chắn để vô hiệu hóa autoindent (mặc dù nó không có vẻ để được kích hoạt ở nơi đầu tiên -. Có lẽ lựa chọn đó là không liên quan)

Trả lời

26

có hai cách thông thường để đi đến "sự khởi đầu" của một dòng trong Vim:

  • (zero) đi đến cột đầu tiên của văn bản
  • ^ đi đến phi khoảng trắng đầu tiên trên dòng

tôi thấy rằng việc sử dụng w thường là cách thuận tiện nhất để tôi chuyển đến ký tự không trống đầu tiên trên một dòng, số cùng một số phím là ^ và là asier để đạt được. (Tất nhiên, nếu không có không gian hàng đầu trên dòng, đừng nhấn w.)

+1

Vì vậy, không có cách nào để thực hiện việc này trong chế độ chèn? Tôi đoán tôi nên quen với việc trao đổi giữa hai người. – Reid

+0

Tôi không nghĩ có cách nào; Tôi không sử dụng chuyển động của con trỏ ở chế độ chèn. Bài viết này có thể hữu ích: http://www.viemu.com/a-why-vi-vim.html –

+0

@Reid - Bạn có thể lập bản đồ theo cách này hay cách khác (xem bên dưới) - nhưng tất cả chuyển động thực sự nên được thực hiện ở chế độ N, không phải I. – Rook

1

hãy thử nhấn 0 (xem thêm :help 0)

cũng có, điều này có thể giúp:

:imap <C-Home> <esc>0a 
13

Bạn có thể remap Home để được giống như ^ (các tài liệu nói Home 's chức năng mặc định là tương đương với lệnh phong trào |):

:map <Home>^ 
:imap <Home> <Esc>^i 

nào nên làm cho bản đồ chế độ chèn tương đương với thoát ra khỏi chế độ chèn , nhấn ^ và sau đó quay lại chế độ chèn. Tôi không biết về phương pháp tốt nhất của ánh xạ một lệnh chuyển động để sử dụng bên trong chế độ chèn, do đó, điều này có thể phá vỡ một cái gì đó, nhưng nó có vẻ làm việc.

Khi cài đặt thụt đầu dòng, chúng không ảnh hưởng đến điều khiển chuyển động, nhưng tôi cũng nghĩ bạn có thể muốn chúng được đặt khác nhau. autoindent chỉ giữ lại thụt đầu dòng hiện tại của bạn cho các dòng mới (vì vậy nếu bạn đặt 4 dấu cách ở đầu dòng, sau khi bạn nhấn trở lại dòng mới của bạn cũng sẽ có 4 dấu cách được đặt trước nó). Tôi không biết tại sao bạn không muốn điều đó, vì nó khá hữu ích trong bất kỳ ngôn ngữ lập trình nào, hoặc thậm chí chỉ là văn bản tự do. Mặt khác, smartindent thực hiện một vài quy tắc thụt lề C-ish được mã hóa cứng, như thụt lề sau khi mở {, và deindenting sau khi đóng cửa}, nhưng không tự động chuyển thụt đầu dòng từ các dòng trước đó. Các tài liệu khuyên bạn nên giữ tự động trên nếu bạn sử dụng smartindent.

Tuy nhiên, smartindent là vô ích đối với các ngôn ngữ không đáp ứng các quy tắc mã hóa cứng hoặc thậm chí có hại (như khi nó tự động xóa thụt đầu dòng từ bất kỳ dòng nào bắt đầu bằng '#'. nhưng là sai cho các lập trình viên python cố gắng viết một bình luận thụt vào).

Vì vậy, vim cũng bao gồm chế độ thụt lề nâng cao hơn, cho phép các quy tắc thụt lề linh hoạt trên cơ sở từng ngôn ngữ/kiểu tệp và là chế độ thụt lề ưa thích cho hầu hết mọi người (ngay cả đối với ngôn ngữ giống như C). Nếu bạn sử dụng filentpe indentation, tốt nhất là tắt smartindent (nếu không nó có thể can thiệp vào filentpe indentation, như di chuyển tất cả các dòng chú thích tới cột 0 trong các tệp python).

Cá nhân, tôi luôn tự động bật, sử dụng loại tệp khi có, và không bao giờ sử dụng smartindent. Vimrc của tôi bao gồm:

set autoindent " doesn't interfere with filetype indents, and is useful for text 
if has("autocmd") 
    " Enable file type detection and indentation 
    filetype plugin indent on 
    set nosmartindent 
endif 

Tôi tưởng tượng có một cái gì đó bạn có thể làm để có smartindent bật chỉ khi filetype thụt không tồn tại cho một filetype, nếu bạn đang chỉnh sửa mà nhiều ngôn ngữ C-như khác nhau mà không filentpe indentation có sẵn.

+1

bạn có thể cắt giảm bản đồ chế độ chèn bằng ký tự bằng cách nói 'imap I' thay vì '^ i' –

7

Dưới đây là những gì tôi có trong số .vimrc của mình. Bản đồ này Trang chủ để di chuyển đến đầu văn bản nếu bạn ở bất kỳ đâu trong dòng và cột 0 nếu bạn đang ở đầu văn bản.

function ExtendedHome() 
    let column = col('.') 
    normal!^
    if column == col('.') 
     normal! 0 
    endif 
endfunction 
noremap <silent> <Home> :call ExtendedHome()<CR> 
inoremap <silent> <Home> <C-O>:call ExtendedHome()<CR> 

Lưu ý: Tôi đang sử dụng một cách bố trí bàn phím mà các bản đồ Home để Alt Gr + Một, rằng tại sao tôi đang sử dụng này. Nếu bạn phải rời khỏi trường chữ cái của bàn phím để truy cập Trang chủ, có thể bạn nên chuyển sang chế độ bình thường để thay thế.

2

Bạn cũng có thể sử dụng _ ở chế độ Bình thường để chuyển đến ký tự không khoảng trắng đầu tiên của dòng hiện tại. Bạn cũng có thể sử dụng tính với chuyển động này.

_ <underscore>  [count] - 1 lines downward, 
        on the first non-blank character linewise. 
Các vấn đề liên quan