Đối với các ngôn ngữ có số {}
để biểu thị các khối, vim có khóa toàn năng %
. Điều chuyển động tương đương cho mã python là gì? Hoặc ít nhất để di chuyển đến dòng tiếp theo/trước đó với cùng một thụt lề.Tương đương% chuyển động cho các tệp Python
Trả lời
Các vim wiki đề nghị cam kết ràng buộc như:
nnoremap <M-,> k:call search('^'. matchstr(getline(line('.')+1), '\(\s*\)') .'\S', 'b')<CR>^
nnoremap <M-.> :call search('^'. matchstr(getline(line('.')), '\(\s*\)') .'\S')<CR>^
Cũng như cung cấp một giải pháp toàn diện hơn:
" Jump to the next or previous line that has the same level or a lower
" level of indentation than the current line.
"
" exclusive (bool): true: Motion is exclusive
" false: Motion is inclusive
" fwd (bool): true: Go to next line
" false: Go to previous line
" lowerlevel (bool): true: Go to line with lower indentation level
" false: Go to line with the same indentation level
" skipblanks (bool): true: Skip blank lines
" false: Don't skip blank lines
function! NextIndent(exclusive, fwd, lowerlevel, skipblanks)
let line = line('.')
let column = col('.')
let lastline = line('$')
let indent = indent(line)
let stepvalue = a:fwd ? 1 : -1
while (line > 0 && line <= lastline)
let line = line + stepvalue
if (! a:lowerlevel && indent(line) == indent ||
\ a:lowerlevel && indent(line) < indent)
if (! a:skipblanks || strlen(getline(line)) > 0)
if (a:exclusive)
let line = line - stepvalue
endif
exe line
exe "normal " column . "|"
return
endif
endif
endwhile
endfunction
" Moving back and forth between lines of same or lower indentation.
nnoremap <silent> [l :call NextIndent(0, 0, 0, 1)<CR>
nnoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>
nnoremap <silent> [L :call NextIndent(0, 0, 1, 1)<CR>
nnoremap <silent> ]L :call NextIndent(0, 1, 1, 1)<CR>
vnoremap <silent> [l <Esc>:call NextIndent(0, 0, 0, 1)<CR>m'gv''
vnoremap <silent> ]l <Esc>:call NextIndent(0, 1, 0, 1)<CR>m'gv''
vnoremap <silent> [L <Esc>:call NextIndent(0, 0, 1, 1)<CR>m'gv''
vnoremap <silent> ]L <Esc>:call NextIndent(0, 1, 1, 1)<CR>m'gv''
onoremap <silent> [l :call NextIndent(0, 0, 0, 1)<CR>
onoremap <silent> ]l :call NextIndent(0, 1, 0, 1)<CR>
onoremap <silent> [L :call NextIndent(1, 0, 1, 1)<CR>
onoremap <silent> ]L :call NextIndent(1, 1, 1, 1)<CR>
nào sử dụng:
[l
và]l
nhảy đến trước hoặc dòng tiếp theo với cùng mức thụt đầu dòng như hiện tại hàng.[L
và]L
chuyển đến dòng trước đó hoặc dòng tiếp theo với mức thụt đầu dòng thấp hơn dòng hiện tại.
Bạn luôn có thể sử dụng ý kiến để chèn {} (sẽ không làm được điều này nếu những người khác chia sẻ):
class Game(object): # {
def __init__(self, num, end): # {
pass
# }
# }
Vim có {
và }
chuyển động để di chuyển giữa các "đoạn" và p
văn bản tương ứng -object (vip
, dap
).
Các ftplugin Python mặc định cũng (lại) định nghĩa [[
và ]]
để di chuyển đến lớp tiếp theo và trước và ]m
và [m
chuyển sang phương pháp tiếp theo và trước đó.
indent-object là rất cũng hữu ích cho Python.
tha thứ cho tôi, nhưng đối tượng thụt lề là gì? Liên kết xin vui lòng? – Ayman
Xin lỗi, tôi đã có URL trong khay nhớ tạm của tôi nhưng tôi quên đặt nó vào câu trả lời. Nó rất dễ tìm, mặc dù. – romainl
Khá mát mẻ nhưng thụt lề-đối tượng không hoạt động ở chế độ bình thường. Có cách nào để buộc nó hoạt động ở chế độ bình thường không? –
Tại sao không chỉ tải xuống plugin python? – jamylak
* Hoặc ít nhất để di chuyển đến dòng tiếp theo/trước đó với cùng một thụt lề * - bạn có thể giải thích ý bạn với điều này không? – timss