Vim 党 书写括号的正确方式是什么

2017-02-20 16:23:24 +08:00
 miaoxia

从开始写代码的时候,老师就教如果写括号,要先写括号,再写括号里面的内容

例如下面的代码:

普通的 text 的书写顺序是:(<-代表左箭头,->代表右箭头)

在 Vim 的书写顺序是什么呢? 这是我的写法 感觉好复杂- -

5461 次点击
所在节点    程序员
33 条回复
xss
2017-02-20 16:51:25 +08:00
少年, 你需要插件 surround.vim
passion336699
2017-02-20 16:59:21 +08:00
while
左手小拇指按住 shift ,打();
左手无名指按 ESC ,右手中指按 I ,打()里面的代码;
()里条件打完,同操作按 ESC ,左手小拇指按住 shift ,同时左手中指按$,同操作按 I ,再进行其他输入。。
这个指法如何 @_@
daviswei
2017-02-20 16:59:26 +08:00
别扮酷用 hjkl 来移动光标嘛。。。有专门的上下左右撒
lululau
2017-02-20 17:02:29 +08:00
少年, 你需要插件 unimpaired.vim
xss
2017-02-20 17:03:30 +08:00
@daviswei 专门的上下左右实在是鸡肋...hjkl 可以手指不用离开基础键就搞定移动. 否则手来回移来移去浪费时间.
lzhCoooder
2017-02-20 17:14:51 +08:00
这种插件很多,我觉得你那样也不是很别扭比去按上下左右好多了
ltux
2017-02-20 17:15:36 +08:00
Tiande
2017-02-20 17:21:33 +08:00
善用各种 map 即可。

譬如下面这个 map ,
当你处于 i 模式输入 $t ,会插入书名号 <> ,且光标会移动到 <> 中间。(不需要 Esc 后调整光标位置)
当你处于 v 模式输入 $t ,会用书名号 <> 立即包裹你选中的部分。
```
vnoremap $t <esc>`>a><esc>`<i<<esc>
inoremap $t <><esc>i
```

括号同理。
kongse
2017-02-20 17:40:49 +08:00
可以用 Autokey 自己编一个, WIn + 1 插入一对括号, Win + 2 插入两个括号, WIn + Shift + 1 插入<>等,插入后自动移动到中间位置。编好了每个编辑器都能通用。
majixian621
2017-02-20 18:28:39 +08:00
配置自己的代码习惯吧, vim 里面默认$是行尾,但是$的位置确实有点尴尬,我自己就配置了两个快捷键, le,跳至行尾, lb 跳至行首,同时还可配置文本首尾的跳,还是比较方便的。 vimrc 如下,多练习就好了,我一直觉得码字的速度不是影响写代码的啊。。。。
nmap lb ^
nmap le $
nmap lt H
nmap ln L
nmap lm M
wudanyang
2017-02-20 18:43:04 +08:00
while () <c-[>isomething<c-[>Asomthing
woohaha
2017-02-20 18:48:47 +08:00
先装 surround.vim,再定义^l 为右键
TerrenceSun
2017-02-20 19:31:49 +08:00
可以试试 ctrl+o ,临时进可视模式
binux
2017-02-20 19:38:04 +08:00
对的,我就是用那种最复杂的方式写括号,然后 ESC 移动再插入的。
插件帮我闭合了我还不习惯!
loading
2017-02-20 19:38:38 +08:00
难道不是按 (,然后直接出 (光标)

现在连手机输入法都是直接出一对啦……
rrfeng
2017-02-20 19:53:20 +08:00
不应该是各语言的自动 snippet 插件搞定吗?
DiamondbacK
2017-02-20 20:39:31 +08:00
我自己没什么需求,全是手动打括号。
```
inoremap jk <Esc>
inoremap <Esc> <Nop>
```
while ()jki<code-in>jkla<code-after>


已经够简单了。如果非要搞一个 mapping 来省这么一点点力气,我这儿有个土法炮制刚出炉的:
```
inoremap ( (<Esc>:call AutoParen(nr2char(getchar()))<CR>
function! AutoParen(char)
call feedkeys('a', a:char, 'n')
if a:char != ')'
call feedkeys(")\<Esc>i", 'n')
endif
endfunction
```

这要智能一些,将连续输入 '()' 作为例外处理了。
while (<code-in>jkla<code-after>
少打 ')jki' 几个字。
loryyang
2017-02-20 20:46:46 +08:00
“从开始写代码的时候,老师就教如果写括号,要先写括号,再写括号里面的内容”
这个是怕你写错括号的匹配吗?感觉意义不大,我都是分开打的。一般括号里面的内容不多,都不会漏的。万一真漏了,编译( cpp )或者运行( python )时都会提醒的
不过你那样写也没问题,并不是很麻烦
DiamondbacK
2017-02-20 20:46:51 +08:00
typo:
call feedkeys('a', a:char, 'n')
correct:
call feedkeys('a'. a:char, 'n')
klesh
2017-02-20 20:55:32 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341799

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX