vimscript之list和dict

      现在vim对我来说可不是一个玩具了,因为现在我发现工作中,有时候是必须写一写些工具,以前用C++写,写一个工具弄一次界面不知道要要编译启动多少次,后来觉得python不用编译也能完成真方便,后来又发现python编辑和调试真坑,再后来发现vim可以和python无缝结合后,在nmap下配置各种快捷键,可以直接调试,生活一下子变的无比美好了,现在vim对我不但只是编辑器,而且是一个可以集合各种工具功能的程序库,所以现在有必要好好复习一下vmscript啦,现在不是算折腾啦,时间的付出也有价值啦.

:h list
	:let mylist = [1, two, 3, "four"]
	:let emptylist = []
	:let nestlist = [[11, 12], [21, 22], [31, 32]]
	:let item = mylist[0]		" get the first item: 1
	:let item = mylist[2]		" get the third item: 3
	:let item = nestlist[0][1]	" get the first list, second item: 12
	:let last = mylist[-1]		" get the last item: "four"
	:echo get(mylist, idx)
	:echo get(mylist, idx, "NONE")
	:let longlist = mylist + [5, 6]
	:let mylist += [7, 8]


	:call insert(list, 'a')		" prepend item 'a'
	:call insert(list, 'a', 3)	" insert item 'a' before list[3]
	:call add(list, "new")		" append String item
	:call add(list, [1, 2])		" append a List as one new item
	:call extend(list, [1, 2])	" extend the list with two more items
	:let i = remove(list, 3)	" remove item 3
	:unlet list[3]			" idem
	:let l = remove(list, 3, -1)	" remove items 3 to last item
	:unlet list[3 : ]		" idem
	:call filter(list, 'v:val !~ "x"')  " remove items with an 'x'


	:call sort(list)		" sort a list alphabetically
	:call reverse(list)		" reverse the order of items
	:call uniq(sort(list))		" sort and remove duplicates


	:for item in mylist
	:   call Doit(item)
	:endfor


	:let index = 0
	:while index < len(mylist)
	:   let item = mylist[index]
	:   :call Doit(item)
	:   let index = index + 1
	:endwhile


	:for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
	:   call Doit(lnum, col)
	:endfor


	:for [i, j; rest] in listlist
	:   call Doit(i, j)
	:   if !empty(rest)
	:      echo "remainder: " . string(rest)
	:   endif
	:endfor


	:let r = call(funcname, list)	" call a function with an argument list
	:if empty(list)			" check if list is empty
	:let l = len(list)		" number of items in list
	:let big = max(list)		" maximum value in list
	:let small = min(list)		" minimum value in list
	:let xs = count(list, 'x')	" count nr of times 'x' appears in list
	:let i = index(list, 'x')	" index of first 'x' in list
	:let lines = getline(1, 10)	" get ten text lines from buffer
	:call append('$', lines)	" append text lines in buffer
	:let list = split("a b c")	" create list from items in a string
	:let string = join(list, ', ')	" create string from list items
	:let s = string(list)		" String representation of list
	:call map(list, '">> " . v:val')  " prepend ">> " to each item


	:exe 'let sum = ' . join(nrlist, '+')


:h dict
	:let mydict = {1: 'one', 2: 'two', 3: 'three'}
	:let emptydict = {}
	:let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}

	:let val = mydict["one"]
	:let mydict["four"] = 4

	:let val = mydict.one
	:let mydict.four = 4

	:echo dict.key[idx].key

	:for key in keys(mydict)
	:   echo key . ': ' . mydict[key]
	:endfor

	:for key in sort(keys(mydict))

	:for v in values(mydict)
	:   echo "value: " . v
	:endfor

	:for [key, value] in items(mydict)
	:   echo key . ': ' . value
	:endfor

	:let onedict = {'a': 1, 'b': 2}
	:let adict = onedict
	:let adict['a'] = 11
	:echo onedict['a']
	11

	:let dict[4] = "four"
	:let dict['one'] = item

	:let i = remove(dict, 'aaa')
	:unlet dict.aaa
	:unlet dict['aaa']

	:function Mylen() dict
	:   return len(self.data)
	:endfunction
	:let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
	:echo mydict.len()

	:let mydict = {'data': [0, 1, 2, 3]}
	:function mydict.len()
	:   return len(self.data)
	:endfunction
	:echo mydict.len()

	:if has_key(dict, 'foo')	" TRUE if dict has entry with key "foo"
	:if empty(dict)			" TRUE if dict is empty
	:let l = len(dict)		" number of items in dict
	:let big = max(dict)		" maximum value in dict
	:let small = min(dict)		" minimum value in dict
	:let xs = count(dict, 'x')	" count nr of times 'x' appears in dict
	:let s = string(dict)		" String representation of dict
	:call map(dict, '">> " . v:val')  " prepend ">> " to each item

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习Vimscript是一项有挑战性但却非常有价值的任务。Vimscript是用于编写Vim编辑器的脚本语言,掌握它可以让我们更加灵活地定制和扩展Vim的功能。 学习Vimscript的第一步是理解其基本语法和结构。它具有变量、函数、条件判断、循环等常见的编程元素。我们可以通过编写简单的脚本来熟悉这些基本概念。 接下来,我们需要学会如何使用Vimscript来操作文本。这包括了移动光标、选中文本、插入和删除文本等操作。Vimscript提供了丰富的内置函数,可以帮助我们轻松地完成这些任务。 除了操作文本,了解Vimscript的事件处理也是非常重要的。Vim具有许多事件,在特定的事件触发时,我们可以编写相应的Vim脚本来实现自定义的行为。这样可以大大提升我们的编辑效率。 学习Vimscript的过程中,我们还应该熟悉一些常用的Vimscript插件和函数。这些插件和函数可以扩展Vim的功能,并提供更多的可定制选项。了解它们的使用方法可以使我们更加高效地使用Vim。 虽然学习Vimscript可能有些困难,但通过不断的练习和实践,我们可以逐渐掌握它。阅读相关的文档、书籍和教程是一个很好的开始,同时,参与Vim社区也能够让我们与其他Vim用户和开发者交流经验,相互学习。 总之,学习Vimscript可能会有一些挑战,但掌握它将使我们成为更加高效和自定义的Vim用户。不断学习和实践,相信我们一定能够体验到Vimscript的魅力和能力。 ### 回答2: 《学习 Vim Script 的困难之路》是一本旨在帮助初学者深入学习 Vim ScriptVim 脚本)的书籍。Vim Script是一种用于定制和扩展Vim编辑器功能的脚本语言。很多人觉得学习 Vim Script 很难,因为它具有自身的语法和特殊规则。但正是通过战胜这些难点,我们才能更好地理解并灵活运用 Vim。 这本书详细介绍了 Vim Script 的各种概念和基本语法,如变量、条件语句、循环和函数等等。通过提供大量实例和练习,读者可以通过实践巩固所学知识,逐渐掌握 Vim Script 的编程能力。 学习 Vim Script 有一定难度,因为它与其他编程语言有一些区别。首先,它更专注于文本编辑方面的功能,需要适应编辑器的工作方式。其次,Vim Script拥有独特的命令和函数,需要充分理解和记忆。最后,Vim Script 的文档相对较少,需要我们进行更多的实践和尝试。 但不论学习 Vim Script 是否困难,它都是值得学习的。Vim 是一个高度可定制和扩展的编辑器,通过学习 Vim Script,我们可以根据自己的需求来定制和优化编辑器体验。掌握 Vim Script 不仅可以提高编辑效率,还能让我们更好地理解 Vim 的内部机制。 总而言之,学习 Vim Script 可能会有一些困难,但只有通过不断的实践和练习,我们才能逐渐掌握这门语言。《学习 Vim Script 的困难之路》是一本很好的指南,通过阅读并实践书中的内容,我们有望成为 Vim Script 的高手。 ### 回答3: 学习Vimscript的困难之路是面对我们必须克服的挑战。Vimscript是一种功能强大却非常独特的编程语言,用于扩展Vim编辑器的功能。为了精通Vimscript,我们需要有很高的耐心和积极性。 首先,我们需要深入了解Vim的工作原理和结构。我们需要熟悉Vimscript的基本语法和数据结构,包括变量、函数以及条件语句。我们必须理解Vimscript与其他编程语言的不同之处,例如其不同的命名规则和特殊的符号。 接下来,我们需要学习如何使用Vimscript来扩展和定制Vim编辑器。我们可以利用Vimscript创建自定义命令、映射键盘快捷方式、编写插件等。理解Vimscript的底层原理和机制将有助于我们更好地利用这些功能。 另一个困难在于Vimscript缺乏文档和资源。相较于其他编程语言,Vimscript的资料和教程相对较少。因此,我们需要积极探索和研究,利用互联网和相关社区资源来解决我们遇到的问题。 最重要的是,我们必须进行实践。仅仅阅读文档和教程是不够的,我们需要编写代码并测试我们的脚本。通过实际操作,我们才能更好地理解Vimscript的概念和用法,并不断改进和提升自己的技能。 尽管学习Vimscript是一条艰难的道路,但我们要坚持下去。随着经验的积累和不断的实践,我们将逐渐变得熟悉和精通Vimscript,从而能够更好地定制和扩展Vim编辑器,提高我们的工作效率和舒适度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值