Tôi đang làm việc với một kịch bản python nhỏ, cần thực thi thường xuyên để gỡ lỗi và phát triển hơn nữa.
Tôi có thể tách màn hình vim và thực thi tập lệnh của mình trên một phần bằng tổ hợp phím không?
Tôi đang làm việc với một kịch bản python nhỏ, cần thực thi thường xuyên để gỡ lỗi và phát triển hơn nữa.
Tôi có thể tách màn hình vim và thực thi tập lệnh của mình trên một phần bằng tổ hợp phím không?
Câu trả lời:
Thêm dòng này vào .vimrc của bạn:
command R !./%
Và sau đó bạn có thể chỉ cần gõ ": R" trong khi ở Vim để chạy tập lệnh ( vim-run-current-file )
Vim không, và sẽ không bao giờ hỗ trợ shell được nhúng như emacs hoặc kate (nếu bạn muốn nói vậy), hãy xem câu hỏi stackoverflow này .
David Spillet đã đúng, bạn có thể chạy vim của mình trong màn hình gnu:
$ screen vim foo.txt
Nhưng điều đó sẽ chỉ cung cấp cho bạn một cái gì đó từ xa giống như một người quản lý cửa sổ trong một thiết bị đầu cuối - RẤT hữu ích khi được sử dụng trên ssh hoặc trên hộp không có X, nhưng tại địa phương bạn cũng có thể mở một xterm khác và chuyển đổi giữa chúng. *
Dù sao, nếu bạn có thể sống với thực tế là bạn sẽ không thấy tệp bạn đang chỉnh sửa trong khi xem đầu ra mà nó tạo ra, mẹo của Jack M là tốt, nhưng có thể ngắn hơn:
:map ;e :w<cr>:!python %<cr>
Với cùng một mục đích, tôi có cái này trong ~/.vimrc
:
au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif
fun! CallInterpreter()
if exists("b:interpreter")
exec ("!".b:interpreter." %")
endif
endfun
map <F5> :call CallInterpreter()<CR>
Điều này chạy bất kỳ tập tin có một shebang ( #!
) trên dòng đầu tiên. Nó sử dụng trình thông dịch để chạy tệp, vì vậy nó không cần phải có quyền thực thi.
* (màn hình có một số tính năng rất gọn gàng khác như sao chép và dán từ đầu ra, giám sát các cửa sổ ẩn cho hoạt động / không hoạt động, có thể sử dụng phiên từ các thiết bị đầu cuối khác nhau cùng một lúc, có thể đăng xuất khỏi tất cả các chương trình đang chạy - nó là một công cụ mạnh mẽ).
:map ;e :w<cr>:!python %<cr>
muốn lặp lại nội dung vào bộ đệm vim của tôi để "xác nhận" (?) rằng lệnh đã chạy. Làm thế nào để tôi có được nó chỉ đơn giản là thực hiện lệnh một cách im lặng? :map <silent> ...
không xuất hiện để làm việc
Cách ít dài dòng nhất (đòi hỏi tập lệnh của bạn phải được thực thi) có lẽ là:
:!%
:!./%
kịch bản sẽ được tìm thấy trong thư mục hiện tại.
!
vim bảo thực thi bất cứ điều gì theo lệnh bash, vì vậy bạn có thể làm !echo "Hello"
. Các %
được mở rộng là tên của tập tin hiện hành.
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
Là những gì tôi đã sử dụng với xin vui lòng (F5 chạy tập lệnh hiện tại).
Để biến vim thành một IDE python mạnh mẽ, tôi khuyên bạn nên hướng dẫn này:
Đặt đoạn mã nhỏ này vào .vimrc của bạn để thực thi tệp hiện tại bằng một tổ hợp phím (như F5
) và hiển thị kết quả trong bộ đệm ngăn chia mới.
:!
không sao nhưng bạn cần chuyển sang thiết bị đầu cuối để xem kết quả.
Mặc dù bạn có thể làm điều đó với ctrl-z
và mang vim trở lại với fg
nó vẫn có nghĩa là bạn cần phải chuyển đổi bối cảnh rất nhiều.
Cách thức hoạt động của đoạn mã này là bằng cách trước tiên đoán tệp thực thi dựa trên filetype
và sau đó chạy nó với tệp hiện tại làm đối số của nó.
Tiếp theo, một phương thức tiện ích tiện dụng sẽ lấy đầu ra và đưa nó vào một bộ đệm mới.
Nó không hoàn hảo, nhưng thực sự nhanh cho quy trình công việc chung.
Đây là đoạn trích được sao chép dưới đây:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>
" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
let filetype_to_command = {
\ 'javascript': 'node',
\ 'coffee': 'coffee',
\ 'python': 'python',
\ 'html': 'open',
\ 'sh': 'sh'
\ }
let cmd = get(filetype_to_command, &filetype, &filetype)
call RunShellCommand(cmd." %s")
endfunction
" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
" :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded Form: ' .expanded_cmdline)
call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !'. expanded_cmdline
setlocal nomodifiable
1
endfunction
Tôi không biết trực tiếp về vim, nhưng bạn có thể chia đôi màn hình theo cách này nói chung với screen
tiện ích. ctrl+ a, S(lưu ý, đó là chữ S viết hoa) sẽ phân chia màn hình và bạn có thể chuyển đổi giữa hai với ctrl+ a, tab(nếu cửa sổ trống, sử dụng ctrl+ a, nđể di chuyển sang cửa sổ mở khác hoặc ctrl+ a, cđể tạo một cửa sổ mới) .
Bạn cũng có thể chia màn hình thành nhiều hơn hai và thay đổi kích thước của các phần tách bằng ctrl-a ,: thay đổi kích thước. Tôi sử dụng màn hình theo cách này thường xuyên, và mặc dù đó không phải là giải pháp một phím mà bạn yêu cầu, nó có thể rất thuận tiện.