首頁  >  問答  >  主體

vim下怎麼把一大段代python碼往前移動一個tab?

在vim下方貼了一大段python程式碼,但從某一行開始全部都多後退了一個tab,有100多行,我一個個手動調整好了,累個半死。

請問有沒有辦法更省事點?

伊谢尔伦伊谢尔伦2712 天前1625

全部回覆(11)我來回復

  • 漂亮男人

    漂亮男人2017-05-16 16:43:40

    在vim裡,貼上程式碼之前最好進入貼上模式,這樣就會關閉自動縮排

    set paste
    

    將程式碼貼進去之後再關閉貼上模式

    set nopaste
    

    縮排單行程式碼是兩個大於號碼'>>'
    回縮就是兩個小於號'<<'
    如果想要縮排很多行程式碼的話就照下面做

    1 //在这里按下'v'进入选择模式
    1
    1
    1
    1
    1
    1//光标移动到这里,再按一次大于号'>'缩进一次,按'6>'缩进六次,按'<'回缩。以下同理
    
    function helo{//将光标移动到'{',在按下'%',光标将会移动到匹配的括号
    
    //这里省略1000行
    
    }//光标会移动到这里,再按一次大于号'>'就可以缩进
    

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 16:43:40

    :10,100>
    第10行至第100行縮排
    :20,80<
    第20行至第80行反縮排

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 16:43:40

    normal模式下,遊標在需要處理的起始行,然後:100>>

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 16:43:40

    1,^V 在需要縮排的行前面;
    2,I;
    3,tab

    回覆
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:43:40

    1 按Esc到命令列模式
    2 移動遊標到需要處理的開始行
    3 按v到視圖模式,選取所有需要處理的行
    4 按Ctrl+<就可以了

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 16:43:40

    在Vim 中貼上要注意,如果Vim 無法知道你是在貼上(非GUI 版本,終端中沒有打開滑鼠支援或終端本身不支援滑鼠,因為Vim 沒有X 剪貼簿支援而繞過Vim、使用帶Shift 鍵的方式讓終端直接貼上(如往ssh 中的Vim 貼上時通常Vim 不能存取本地剪貼簿,所以只能讓終端去「打字」)),那麼你需要在貼上前設定'paste' 選項 。此選項會在插入模式停用自動縮排、映射等。詳見 :h 'paste'

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-16 16:43:40

    可以這樣玩:
    假如你是第10行到第100行需要刪除一個tab,那麼可以這麼寫
    :10,100s/^t//
    就ok了!

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:43:40

    在 vimrc 內定義好python的各種 tab,例如:

    autocmd FileType python set ts=4 | set sw=4 | set expandtab    
    

    然後在 normal 模式,直接輸入=nj
    n 是要求自動對齊的行數,不管縮排是怎麼樣的亂,都會自動對齊

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:43:40

    在下以為 vim 提供的指令都很靈活,但都太底層了。目前所有答主的答案都是硬敲的,難記憶也沒有效率,建議設定成快捷鍵。
    例如個人習慣用tab,選取目標區域然後按快捷鍵即可。

    vimlvnoremap <tab> >gv
    vnoremap <s-tab> <gv
    

    以題主的問題為例。

    1. 移動到目標區域的首行
    2. 輸入 v 進入選擇模式
    3. 輸入 100j 往下移動 100 行,此時已經選取了 100 行目標區域
    4. 輸入 < tab > 鍵。

    完~

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-16 16:43:40

    提供另一個方法,不用進 V 模式。

    1. 移動到需要處理的首行,ma

    2. 移動到需要處理的末行,<'a

    回覆
    0
  • 取消回覆