2011-10-26 48 views
1

我可以 'JJ' 映射到地圖 'F' 到上一頁在vi

imap jj <Esc>

,我甚至可以字母映射到標籤導航

map tj :tabprevious<CR> 
map tk :tabnext<CR> 

但我不能圖g向上翻頁(即使空格鍵作爲下頁)

map <Space> <PageDown> 
map g <PageUp> 

根據this「當您嘗試映射多個按鍵序列時,您將無法使用小寫或大寫字母(」太危險來映射該字母「),但標點和控制字符是公平的遊戲。 「任何人都可以確認嗎?

如果是這樣,一個人如何分配的功能,像「G」

+1

g是一個有點陌生的一個。就其本身而言,它什麼都不做,但並不完全是「未使用」。在vim中(vi命令在大多數系統中連接到vim)gg進入文件頂部,100gg進入第100行,gj和gk用於導航長包裝線,所以它可能不是最好的選擇。我已經使用一些新的信息更新了我的答案。我可以爲PageUp/Down建議數字1和2。 – davur

+0

你已經有ctrl-b和ctrl-f用於pageup和page-down(或者ctrl-u和ctrl-d用於半色調和半色調用,ctrl-e和ctrl-y用於排隊和line down) – Benoit

+0

@Benoit我放棄了並開始使用ctrl-b/f/u/d,但ctrl按鈕對手腕b/c非常不利,你必須不斷地扭動你的手。 – puk

回答

1

(編輯未映射的關鍵 - 原來的答案建議本機使用Ctrl-F和Ctrl-B,但答案已更新爲目標,這裏是避免使用Ctrl和Shift)

的幾點補充

離開選擇合適的角色給你,假設我們選擇了X現在的問題。

我能想到爲什麼map X <PageUp>不適合你的兩個原因。

  1. 您的vi版本可能不支持PageUp/PageDown。如果這是問題,那麼嘗試改爲映射到vi的頁面跳轉(B爲後面,伴隨着前進),例如。 map X <C-b>

  2. 另一個選擇是它不按預期工作。在vi PageUp/PageDown在'視口'而不是光標上操作。所以如果你在看文件的頂部,但光標不在頂部或不會做任何事情。如果您的光標距離底部兩行,PageDown將不會'工作'。

    爲了解決這個問題,你可以結合'移動視口'<C-b>和'移動光標到視口頂部'H例如。 map X <C-b>H(與之相反的是map X <C-f>L)。或指定自己跳躍的行數map X 30k(Op。map X 30j)。

然後選擇正確的字符覆蓋問題。 Vi有很多本地命令,實際上只有少數角色本身不會做某些事情。因此,如果你的目標是避免RSI,那麼當然會覆蓋一些東西。但要確保覆蓋一些對你個人來說不太有用的東西。

本身: 對你currnetly上線給定的符號F搜索(可以是非常有用的,但不是關鍵的我猜的) 克,以它自己什麼都不做,但GG將光標移動到文件的頂部。選擇g可能會導致issus,因爲vim(不是原始的vi)會將兩個快速按鍵解釋爲轉到文件頂部,而不是執行兩個PageUp。

+0

我剛開始使用vi,特別是通過Ctrl +任何東西來解決我的[RSI](http://en.wikipedia.org/wiki/Repetitive_strain_injury)。我認爲Ctrl按鈕是所有邪惡的根源(甚至在將它移動到轉換按鈕的位置之後)。 h,j,k和l都很棒,但我需要更多的選擇。有什麼建議麼? – puk

+0

那有點問題了。如果你想要的話,你可以覆蓋f,但是最好覆蓋沒有本地vi命令的一個字符。沒有那麼多未使用的字符,因此通常使用CTRL,SHIFT或(通常),使得大多數自定義命令至少有2個鍵。 – davur

+0

vi命令列表(包括未使用的字符)可在http://people.cis.ksu.edu/~bhoward/vi/vi60.html找到。但是如果你對一個給定的角色有更好的使用,你可以覆蓋任何使用過的角色。然而,許多人在vi中使用CTRL-k/j或Shift-k/j來翻頁。 Shift k(或K)未被使用,Shift j(J)被佔用,但並不重要。 – davur

2

這不是回答你的問題,但我認爲這可能對你在RSI中遇到的問題有幫助。它映射空格鍵以在快速和慢速移動模式之間切換。通常按j或k將向下滾動一行。按下空格將打開快速移動模式,按j或k將向下/向上滾動10行。再次按空間恢復正常。這隻會在vim中工作,而不僅僅是簡單的vi(儘管如此,大多數「vi」程序只是符號鏈接到vim)。

它可以在正常和可視編輯模式下工作。

要使用它,把這個代碼某處你~/.vimrc文件:

map <Space> :call ToggleFastMoveMode()<CR> 

vmap <Space> :call ToggleFastMoveMode()<CR>gv 

let g:fastMoveMode = 0 

function! ToggleFastMoveMode() 
    let g:fastMoveMode = 1 - g:fastMoveMode 
    if (g:fastMoveMode == 0) 
     noremap j j 
     vnoremap j j 
     noremap k k 
     vnoremap k k 
    else 
     noremap j 10j 
     vnoremap j 10j 
     noremap k 10k 
     vnoremap k 10k 
    endif 
endfunction 
+0

**這就是答案。**''我也遭受了自我導致的Eclipse和PyCharm驅動的RSI,並且不斷地感嘆Vim的默認使用「」鍵和絃。正如[puk](https://stackoverflow.com/users/654789/puk)所表明的那樣,其他IDE中不斷出現的關鍵痛苦所誘發的痛苦的手腕疼痛是_Why_我們許多人首先採用了Vim。 ''感謝這一點真棒! –