vim像sublime一样的括号处理

Vim、Emacs配置和使用
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

vim像sublime一样的括号处理

#1

帖子 ceclinux » 2013-11-26 19:02

求一段.vimrc
要求如下,在一行中间键入(,则只会出现(
在一行末端键入(,则出现(|)
上面|为光标位置
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
lilydjwg
论坛版主
帖子: 4252
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: vim像sublime一样的括号处理

#2

帖子 lilydjwg » 2013-11-27 0:26

很简单,我随手就可以给你写一个:

代码: 全选

function MayCloseParentheses()
  if col('.') == col('$')
    return "()\<Left>"
  else
    return "("
  endif
endfunction

inoremap <expr> <silent> ( MayCloseParentheses()
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: vim像sublime一样的括号处理

#3

帖子 ceclinux » 2013-11-27 0:50

lilydjwg 写了:很简单,我随手就可以给你写一个:

代码: 全选

function MayCloseParentheses()
  if col('.') == col('$')
    return "()\<Left>"
  else
    return "("
  endif
endfunction

inoremap <expr> <silent> ( MayCloseParentheses()
:em11 我预感lilydjwg大神会回答,果然如此~
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: vim像sublime一样的括号处理

#4

帖子 ceclinux » 2013-11-27 1:14

lilydjwg 写了:很简单,我随手就可以给你写一个:

代码: 全选

function MayCloseParentheses()
  if col('.') == col('$')
    return "()\<Left>"
  else
    return "("
  endif
endfunction

inoremap <expr> <silent> ( MayCloseParentheses()
我把manual看了一遍,<silent>这里不懂,为什么要避免回显,本来就不会回显的吧,谢谢
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: vim像sublime一样的括号处理

#5

帖子 eexpress » 2013-11-27 9:41

代码: 全选

imap ( ()<ESC>i
这不更简单嘛。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4252
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: vim像sublime一样的括号处理

#6

帖子 lilydjwg » 2013-11-27 10:51

ceclinux 写了:
lilydjwg 写了:很简单,我随手就可以给你写一个:

代码: 全选

function MayCloseParentheses()
  if col('.') == col('$')
    return "()\<Left>"
  else
    return "("
  endif
endfunction

inoremap <expr> <silent> ( MayCloseParentheses()
我把manual看了一遍,<silent>这里不懂,为什么要避免回显,本来就不会回显的吧,谢谢
习惯性地加上了。不加应该也看不到什么吧。
头像
lilydjwg
论坛版主
帖子: 4252
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: vim像sublime一样的括号处理

#7

帖子 lilydjwg » 2013-11-27 10:51

eexpress 写了:

代码: 全选

imap ( ()<ESC>i
这不更简单嘛。
ee 回帖不看帖的么?
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: vim像sublime一样的括号处理

#8

帖子 sarrow » 2013-11-27 13:14

嗯。lilydjwg 一直都这么熟悉vim脚本;

我还是喜欢手动一点进行控制;

(
return "("

<Alt-(>
return "()<left>"

因为需求总是变化的。这种操作对我而言,已经足够省事了。
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: vim像sublime一样的括号处理

#9

帖子 ceclinux » 2013-11-27 13:44

代码: 全选

function MayCloseParentheses()
"(当前指针的横坐标)是否等于(当前指针所在行的长度加一),即判断指针是否在当前行的末端
if col('.') == col('$')
"返回(),然后指针向左移一位(移入括号中)
return "()\<Left>"
else
return "("
endif
endfunction
"<expr>为对方法的映射
inoremap <expr>  ( MayCloseParentheses()
记下。。
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: vim像sublime一样的括号处理

#10

帖子 ceclinux » 2013-11-27 13:47

[quote="sarrow"]嗯。lilydjwg 一直都这么熟悉vim脚本;

我还是喜欢手动一点进行控制;

(
return "("

<Alt-(>
return "()<left>"

因为需求总是变化的。这种操作对我而言,已经足够省事了。[/quote《]
<Alt->( 可以这样映射吗
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: vim像sublime一样的括号处理

#11

帖子 eexpress » 2013-11-27 16:05

没注意看。
只是这要求,真写代码的,几乎用不上。
行中间插()是很正常的事情。
● 鸣学
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: vim像sublime一样的括号处理

#12

帖子 ceclinux » 2013-11-27 16:29

eexpress 写了:没注意看。
只是这要求,真写代码的,几乎用不上。
行中间插()是很正常的事情。
呃,中间插()我是很少,一般中间插(然后再过一个word然后插)
要是中间插了(),发现多插了麻烦就大了。。需要<Esc>lx
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: vim像sublime一样的括号处理

#13

帖子 sarrow » 2013-11-27 19:09

要是中间插了(),发现多插了麻烦就大了。。需要<Esc>lx
多插了,直接 normal 下 u 就行了。

或者删除最内层:
<Ctrol-o>ca(

要敲4下键盘,也累啊!
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: vim像sublime一样的括号处理

#15

帖子 Fermat618 » 2013-11-28 12:58

转了一圈之后,把所有的补全括号的插件都去了。这玩意省就省了一个字母,添起乱来毫不含糊。括号里面东西少就打完了再打右括号,不会卡。东西多就把两个括号打完手动移动光标。
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
回复